我正在运行安装了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))的宏。没有问题。
但是,如果您尝试以下示例:
在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...
好的,我想我需要关注 (JOBID) 的数据类型。在书籍《SQL Server 2008 Administration》的第168/169页中也有使用 (JOBID) 的示例:
declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
结果为:
附近有'('的语法不正确。(Microsoft SQL Server,错误:102)
我现在完全困惑了。请问有人能给我提供一个好的建议或解决方案吗?任何形式的帮助都将不胜感激。
最好的祝福 Helmut