0

文字列にフィールドを追加するのに問題があります。現在、巨大な文字列 ('' 内のすべて) で実行されているストアド プロシージャがありますが、Whereステートメントを作成するときに問題が発生しています。

私は持っている:

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

しかし、でエラーが発生しますCHAR(39)Jimmy's文字列の内側のように効果的に見せるにはどうすればよいですか? おそらくばかげた修正だと思いますが、助けてください。

4

1 に答える 1

10

アポストロフィは 2 回の区切り文字に耐えなければならないため、もう一度2 倍にする必要があります。試す:

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

たとえば、次のように比較します。

DECLARE @sql NVARCHAR(255) = N'SELECT ''Jimmy' + CHAR(39) + ''';';
EXEC sp_executesql @sql;

メッセージ 105、レベル 15、状態 1、行 1
文字列 'Jimmy';' の後の閉じていない引用符。
メッセージ 102、レベル 15、状態 1、行 1
'Jimmy';' 付近の構文が正しくありません。

この:

DECLARE @sql NVARCHAR(255) = N'SELECT ''Jimmy''s'';';
EXEC sp_executesql @sql;

メッセージ 105、レベル 15、状態 1、行 1
文字列 ';' の後の閉じられていない引用符。

ついに:

DECLARE @sql NVARCHAR(255) = N'SELECT ''Jimmy''''s'';';
EXEC sp_executesql @sql;

結果:

-------
Jimmy's
于 2013-09-05T14:32:30.090 に答える