1196

insertSQL Server 9 のテーブルにテキスト データを挿入しようとしています。

テキストには一重引用符が含まれます'

どうすればそれを回避できますか?

2 つの単一引用符を使用してみましたが、エラーが発生しました。

例えば。insert into my_table values('hi, my name''s tim.');

4

14 に答える 14

80

一重引用符を別の一重引用符でエスケープしてもうまくいかない場合 (私の最近のREPLACE()クエリではうまくいかなかったように)、SET QUOTED_IDENTIFIER OFFクエリの前に使用してから、クエリのSET QUOTED_IDENTIFIER ON後に使用できます。

例えば

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again
于 2013-09-05T23:20:28.860 に答える
30

私たちの多くは、一重引用符をエスケープする一般的な方法は、以下のように簡単に二重にすることであることを知っています.

PRINT 'It''s me, Arul.';

一重引用符の方法を 2 倍にする

一重引用符をエスケープする別の方法をいくつか見ていきます。

1.ユニコード文字

39 はシングル クォーテーションの UNICODE 文字です。したがって、以下のように使用できます。

PRINT 'Hi,it'+CHAR(39)+'s Arul.';
PRINT 'Helo,it'+NCHAR(39)+'s Arul.';

ユニコード文字

2.QUOTED_IDENTIFIER

もう 1 つの簡単で最良の代替ソリューションは、QUOTED_IDENTIFIER を使用することです。QUOTED_IDENTIFIER が OFF に設定されている場合、文字列を二重引用符で囲むことができます。このシナリオでは、一重引用符をエスケープする必要はありません。したがって、この方法は、一重引用符で多くの文字列値を使用する場合に非常に役立ちます。列の値に一重引用符が含まれる非常に多くの行の INSERT/UPDATE スクリプトを使用する場合に非常に役立ちます。

SET QUOTED_IDENTIFIER OFF;
PRINT "It's Arul."
SET QUOTED_IDENTIFIER ON;

QUOTE_IDENTIFIER

結論

上記の方法は、AZURE とオンプレミスの両方に適用できます。

于 2019-10-31T04:30:16.263 に答える
18

見積もりを2倍にするとうまくいくはずだったので、うまくいかなかったのは独特です。ただし、別の方法として、文字列を一重引用符ではなく二重引用符で囲みます。つまり、

insert into my_table values("hi, my name's tim.");

于 2009-10-19T01:33:44.233 に答える
2

次の構文は、引用符を 1 つだけエスケープします。

SELECT ''''

結果は一重引用符になります。動的SQLを作成するのに非常に役立つかもしれません:)。 ここに画像の説明を入力

于 2019-09-24T15:16:46.280 に答える
0

これはうまくいくはずです

DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
于 2016-11-04T20:41:59.417 に答える
-1

挿入するものの前に ' を挿入するだけです。sqlServer のエスケープ文字のようになります

例: フィールドが as の場合、I'm fine . 次のことができます: UPDATE my_table SET 行 ='I'''' 大丈夫です。';

于 2019-06-24T21:33:30.730 に答える