0

我在将字段添加到字符串时遇到问题。现在我有一个存储过程在一个巨大的字符串上运行(''里面的所有东西)但是我在创建Where语句时遇到了问题。

我有:

' Cast(Name AS varchar(max)) NOT IN (''Jimmy' + CHAR(39) + 's'')'

但是我收到了一个错误CHAR(39)。我怎样才能有效地使它看起来像Jimmy's在字符串内部?我知道这可能是一个愚蠢的修复,但请帮忙。

4

1 回答 1

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
于 2013-09-05T14:32:30.090 回答