执行msdb.dbo.sp_send_dbmail遇Msg22050:sqlcmd库初始化失败求助
错误Msg 22050的解决方法
你遇到的Msg 22050, Level 16, State 1, Line 0错误,核心原因是sp_send_dbmail的@query参数中,字符串常量未正确转义单引号。
修改后的代码
IF EXISTS (SELECT * FROM [StagingMX].[dbo].[_CVA] WHERE DATEDIFF(DAY, [Completion time], GETDATE()) = 1 AND [A] = 'IQQ' AND [B] = 'MDD') BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Admin', @recipients = 'something@gmail.com', @body = 'Good Morning,', @query = 'SELECT * FROM [StagingMX].[dbo].[_CVA] WHERE DATEDIFF(day, [Completion time], GETDATE()) = 1 and [A] = ''IQQ'' AND [B] = ''MDD'';', @subject = 'Customer Voice'; END
关键说明
- 在SQL字符串嵌套场景中(把SQL语句作为字符串传入
@query),单引号需要用两个单引号转义,所以原查询里的'IQQ'要写成''IQQ'',否则会导致SQL语法解析失败,触发sqlcmd初始化错误。 - 你单独执行查询时正常,是因为直接写的
[A] = 'IQQ',不存在字符串嵌套的转义需求;而sp_send_dbmail的@query参数会把传入的内容当作字符串解析,必须转义单引号才能正确识别字符串常量。 - 之前的
TOP(1)查询能运行,是因为该语句没有需要单引号包裹的字符串常量,不存在语法解析问题。
内容的提问来源于stack exchange,提问作者Raúl Vélez
相关产品推荐
相关产品推荐

