Hel*_*her 6 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)上,您可以找到在作业步骤中使用令牌的说明.哇,太棒了,这就是我要找的!! 只需使用(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
Run Code Online (Sandbox Code Playgroud)
你得到:
'ESCAPE_SQUOTE'附近的语法不正确.(Microsoft SQL Server,错误:102)
好的,现在从头开始:
PRINT N'$(ESCAPE_SQUOTE(JOBID))'
Run Code Online (Sandbox Code Playgroud)
结果0xE33FE637C10B3C49A6E958BB3EF06959但JOB_ID是37E63FE3-0BC1-493C-A6E9-58BB3EF06959
的"N'"我觉得做一个隐式转换到(JOBID)的NVARCHAR ......
好吧,我想我要关心的数据类型( JOBID).在这本书中的"SQL Server 2008管理"一百六十九分之一百六十八页面上有同样使用(JOBID)的例子:
declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
Run Code Online (Sandbox Code Playgroud)
结果:
.附近有语法错误('(的Microsoft SQL Server,错误:102)
.我完全糊涂了,现在请能有人帮我一个好的建议或解决方案各式各样的帮助表示赞赏.
最好的问候Helmut
我们最近遇到了这个问题,没有走你在 MSDN 中找到的路线。相反,我们直接按名称从 dbo.sysjobs 中恢复了 jobid(与您的示例相反),然后在作业中使用它来检查执行状态(如果作业状态已更改,则退出长时间运行的 while 循环)。
declare @jobid uniqueidentifier
SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]'
Run Code Online (Sandbox Code Playgroud)
感谢您的回答。问题是我试图解析作业步骤中的语句。然后我得到了这个错误。运行作业时没有问题。我现在最好的解决方案是:
declare @JobID uniqueidentifier
SELECT @JobID = $(ESCAPE_NONE(JOBID));
PRINT 'My JobID is ' + Convert(char(255), @JobID)
Run Code Online (Sandbox Code Playgroud)
现在您使用 @JobID 进行处理,但据我所知,到目前为止您必须始终转换为 char(255)。感谢MSDN上的用户 state_dba 。
| 归档时间: |
|
| 查看次数: |
15639 次 |
| 最近记录: |