我正在运行安装了 Service Pack 1 的 SQL Server 2008 64 位开发人员版。
我有一份 SQL Server 代理工作。在这个工作中,我想获取我自己工作的 job_id 。
在 MSDN 上(http://msdn.microsoft.com/en-us/library/ms175575(v=SQL.100).aspx http://msdn.microsoft.com/en-us/library/ms175575(v=SQL.100).aspx)您可以找到在作业步骤中使用令牌的说明。哇,太棒了,这就是我要找的!!只需使用(JOBID)即可。
从 SQL Server 2005 SP1 开始,您必须使用像 $(ESCAPE_NONE(JOBID)) 这样的宏。没问题。
但如果你尝试这个例子:
DECLARE @name NVARCHAR(128)
select @name = name from msdb.dbo.sysjobs where job_id = $(ESCAPE_SQUOTE(JOBID))
PRINT @name
you get:
“ESCAPE_SQUOTE”附近的语法不正确。 (微软 SQL Server,错误:102)
好的,现在从头开始:
PRINT N'$(ESCAPE_SQUOTE(JOBID))'
结果为 0xE33FE637C10B3C49A6E958BB3EF06959 但 job_id 是
37E63FE3-0BC1-493C-A6E9-58BB3EF06959
我认为“N”隐式转换为 (JOBID) 的 NVARCHAR...
好吧,我想我必须关心(JOBID)的数据类型。在《SQL Server 2008 Administration》一书中的第 168/169 页中,还有一个使用 (JOBID) 的示例:
declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
结果是:
“(”附近的语法不正确。(Microsoft SQL Server,错误:102)
我现在完全糊涂了。请有人帮助我提供好的建议或解决方案。感谢各种帮助。
此致
赫尔穆特
我们最近在这方面遇到了麻烦,并且没有遵循您在 MSDN 中找到的路线。相反,我们直接按名称从 dbo.sysjobs 恢复 jobid(与您的示例相反),然后在作业中使用它来检查执行状态(如果作业状态发生更改,则退出长时间运行的 while 循环)。
declare @jobid uniqueidentifier
SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)