【问题标题】:Msg 8169, Level 16, State 2, Line 3 Conversion failed when converting from a character string to uniqueidentifier. (when using a token)消息 8169,级别 16,状态 2,第 3 行从字符串转换为唯一标识符时转换失败。 (使用令牌时)
【发布时间】:2012-11-27 14:20:12
【问题描述】:

我在作业步骤中有此代码,存储过程运行良好,问题在于获取作业名称。

declare @jobName varchar(100)

set @jobName = (select name from msdb..sysjobs where job_id = '$(ESCAPE_SQUOTE(JOBID))')

EXEC spSendSuccessEmail @jobName

我错过了什么吗?

我要做的就是将步骤所在的作业 ID 传递给存储过程。

【问题讨论】:

  • '$(ESCAPE_SQUOTE(JOBID))' 解决了什么问题?也许尝试将其记录到表中。

标签: sql-server tsql token jobs


【解决方案1】:

您显然正在使用需要唯一标识符的 varchar。理想情况下,您想修复打字,但演员也可以解决问题。 如果 sp 需要一个 uniqueidentifier,请在执行 sp 之前尝试将 @jobName 转换为 uniqueidentifier

【讨论】:

  • 那行不通。你不能在exec 中内联CAST。此外,如果隐式转换为唯一标识符失败,那么显式转换无法解决的值肯定有问题。 The OP is trying to use a SQL Agent macro
  • 好的,编辑答案,然后投射到“set @jobname = CAST(xxx AS unique identifier)。我在回答中提到这是一个创可贴,更好的解决方案是输入@jobName作为唯一标识符。
  • 导致问题的不是EXEC。这是where job_id = '$(ESCAPE_SQUOTE(JOBID))'
  • 问题在于@MartinSmith 所说的。我通过将作业 id 设置为实际值来通过了这个,但我更喜欢做正确的方式并使用令牌,因为现在我必须手动更改我想要执行此操作的每个作业的 id。
  • 您建议在代码的不相关部分将作业 name 转换为 uniqueidentifier 并使用无效语法。此外,单独铸造是不够的,只会给出同样的错误。 OP 需要 ESCAPE_NONE 而不是 ESCAPE_SQUOTE(在这种情况下,select name from msdb..sysjobs where job_id = $(ESCAPE_NONE(JOBID)) 也可以与隐式转换一起正常工作。
猜你喜欢
  • 2016-06-25
  • 1970-01-01
  • 2020-05-27
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多