sql-server - SQL Server 代理 - 获取我自己的 job_id

标签 sql-server sql-agent sql-agent-job

我正在运行安装了 Service Pack 1 的 SQL Server 2008 64 位开发人员版。 我有一份 SQL Server 代理工作。在这个工作中,我想获取我自己工作的 job_id。
在 MSDN (http://msdn.microsoft.com/en-us/library/ms175575(v=SQL.100).aspx) 上,您可以找到在作业步骤中使用 token 的说明。哇,太棒了,这就是我要找的!!只需使用(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)
我现在完全糊涂了。请有人帮助我提供好的建议或解决方案。感谢各种帮助。

最诚挚的问候 赫尔穆特

最佳答案

我们最近在这方面遇到了麻烦,并且没有采用您在 MSDN 中找到的路线。相反,我们直接按名称从 dbo.sysjobs 恢复 jobid(与您的示例相反),然后在作业中使用它来检查执行状态(如果作业状态发生更改,则退出长时间运行的 while 循环)。

declare @jobid uniqueidentifier
SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]'

关于sql-server - SQL Server 代理 - 获取我自己的 job_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4213868/

相关文章:

java - 如何从 hibernate 中的日期类型列中读取空值

sql-server - 为什么 sys.indexes 表有一个 NULL 索引名称?

c# - 尝试返回 'select count (Id)' 时出现 System.IndexOutOfRangeException

sql-server - SQL Server 网页版 SSIS

sql-server - 将 SSIS 包作为 SQLAgent 作业执行

sql-server - 在无限循环中运行 SQL 代理作业

sql-server-2008 - SQL Server 代理为 CmdExec 添加参数

sql-server - 无法创建大小为 8074 的行,该行大于允许的最大行大小 8060

json - 执行 SQL Server 代理作业时出错 : JSON text is not properly formatted, 意外字符 '"'

sql-server - 比较文件名的 SQL 作业步骤