我在向字符串添加字段时遇到问题。现在我有一个存储过程在一个巨大的字符串上运行(''内的所有内容)但是我在创建Where
语句时遇到了问题。
我有:
' Cast(Name AS varchar(max)) NOT IN (''Jimmy' + CHAR(39) + 's'')'
但我收到了CHAR(39)
的错误。如何有效地使其在字符串中看起来像Jimmy's
?我知道这可能是一个愚蠢的修复,但请帮助。
答案 0 :(得分:10)
你需要再次加倍 ,因为撇号必须能够存活两轮分隔符。尝试:
' Cast(Name AS varchar(max)) NOT IN (''Jimmy''''s'')'
例如,比较:
DECLARE @sql NVARCHAR(255) = N'SELECT ''Jimmy' + CHAR(39) + ''';';
EXEC sp_executesql @sql;
Msg 105,Level 15,State 1,Line 1
字符串'Jimmy'后面有未闭合的引号;'。
消息102,第15级,状态1,第1行
'Jimmy'附近的语法不正确;'。
而且:
DECLARE @sql NVARCHAR(255) = N'SELECT ''Jimmy''s'';';
EXEC sp_executesql @sql;
Msg 105,Level 15,State 1,Line 1
在字符串';'之后的未闭合的引号。
最后:
DECLARE @sql NVARCHAR(255) = N'SELECT ''Jimmy''''s'';';
EXEC sp_executesql @sql;
结果:
-------
Jimmy's