【发布时间】:2010-11-18 10:38:33
【问题描述】:
我正在运行安装了 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...
好的,我想我必须关心(JOBID)的数据类型。在第 168/169 页的“SQL Server 2008 管理”一书中,还有一个使用 (JOBID) 的示例:
declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
导致:
'(' 附近的语法不正确。(Microsoft SQL Server,错误:102)
我现在完全糊涂了。请有人帮我提供一个好的建议或解决方案。各种帮助表示赞赏。
最好的问候 赫尔穆特
【问题讨论】:
标签: sql-server sql-agent sql-agent-job