我正在运行安装了 Service Pack 1 的 SQL Server 2008 64 位开发人员版。我有一个 SQL Server 代理作业。在这份工作中,我想获得我自己工作的 job_id。
在 MSDN ( 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
你得到:
'ESCAPE_SQUOTE'附近的语法不正确。(Microsoft SQL Server,错误:102)
好的,现在从头开始:
PRINT N'$(ESCAPE_SQUOTE(JOBID))'
结果为 0xE33FE637C10B3C49A6E958BB3EF06959 但 job_id 为 37E63FE3-0BC1-493C-A6E9-58BB3EF06959
我认为“N'”隐式转换为(JOBID)的 NVARCHAR ......
好吧,我想我必须关心(乔比)。在第 168/169 页的“SQL Server 2008 管理”一书中,还有一个使用 (JOBID) 的示例:
declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
结果:
'('附近的语法不正确。(Microsoft SQL Server,错误:102)
我现在完全糊涂了。请有人帮我提供一个好的建议或解决方案。感谢各种帮助。
最好的问候赫尔穆特