い逃れは、単一引用符、まさにSQLサーバー?
-
22-09-2019 - |
質問
監督-選手コメン insert
一部のテキストデータテーブル SQL Server
9.
テキストを含む単一引用符(').
どんな逃げる?
を使ってみました二つのシングルクォーテーションでしたが、投っています。
例えば. insert into my_table values('hi, my name''s tim.');
解決
を単一引用符は、あなたがあなたの例で私たちを示してきたのと同様に、のそれらを倍にすることによってエスケープされます。次のSQLは、この機能を示しています。私は、SQL Server 2008でそれをテストします:
DECLARE @my_table TABLE (
[value] VARCHAR(200)
)
INSERT INTO @my_table VALUES ('hi, my name''s tim.')
SELECT * FROM @my_table
結果
value
==================
hi, my name's tim.
他のヒント
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
いかがます:
insert into my_table values('hi, my name'+char(39)+'s tim.')
引用符でアップ倍増は、働いているはずです。しかし、代替文字列の周りに、二重引用符の代わりに、単一のものを使用しています。すなわち。、
insert into my_table values("hi, my name's tim."
);
2つの周辺のこの:
のための '
できるだけでダブルでの文字列、例えばselect 'I''m happpy' -- will get: I'm happy
他の性質きのスポンサーではありません:sqlサーバーで任意の文字のunicodeによる select unicode(':')
この場合も可能です select 'I'+nchar(39)+'m happpy'
またの注意するために別のものは、それが本当に古典的なASCII '(ASCII 27)またはUnicode 2019(似ていますが、同じではない)として記憶されているか否かです。
これは、挿入上大したことではありませんが、選択して更新に世界を意味することができます。
それはUnicode値が、その後エスケープだが「WHERE句で(例えばどこ何とか= '労働者のコンプ」)あなたが探している値のように返されますがない場合は "『労働者のコンプ』でUnicode値は実際にある。
場合は、クライアント・アプリケーションがサポートする他でフリーキーだけでなく、コピーやベースの入力を貼り付け、それはいくつかの行にUnicodeの可能性があり、およびASCII!
これを確認するための簡単な方法は、あなたが探している値を戻すことが開放クエリのいくつかの種類を行うことであり、その後、コピーして、メモ帳++またはその他のユニコードサポートするエディタにそれを貼り付けます。
異なる外観ASCII値とUnicodeの1が目に明らかにする必要がありますが、あなたは肛門の方に傾く場合、それはバイナリエディタで27(ASCII)または92(ユニコード)として表示されます。
この作業をする必要があります:バックスラッシュを使用し、二重引用符
を入れます"UPDATE my_table SET row =\"hi, my name's tim.\";
これは動作するはずです。
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')
を挿すだけで、保存されている'の前には何も挿入される.のようになりますの脱出の文字sqlServer
例:できる分野として、 今の.ことができるの?更新my_tableセット列='I"mます。';
string value = "Abhishek's";
value = Replace(value,"'","''");