2012-01-19 15 views
10

このサンプルT-SQLクエリがあり、SQL-Server-2008でこれを試しています。SQL-Updateステートメントで一重引用符と二重引用符の両方を処理する方法

DECLARE nvarchar(1000) @wstring = "I asked my son's teacher, "How is my son doing now?"" 

UPDATE tablename SET columnname = ' " & @wstring & " ' where ... blah ... blah 

私は上記のクエリがエラーをスローすることがわかります。

だから私はSQL-UPDATEステートメントの両方の単一引用符と二重引用符を処理し、脱出するにはどうすればよいです。

手動bouble引用符ごとに引用符と同様に前に「スラッシュ\」または単一引用符を追加する方法について提案しないでください。

上記の例は単に試料一つであり、実際のアプリケーションの値は、いくつかの他のシステムのソースから受信される1000個の以上の文字であるので、これは非現実的であろう。

+0

はあなたがSQLクライアントで手動で挿入したい特定のテキストファイルを持っているような状況ですか?あるいは、ファイルを挿入するためのプログラムを書いていますか?プログラムの作成方法を理解するためにクライアントでテストしていますか? –

+0

は、C#を使用していますか? – Pankaj

+0

Thx Russell ...状況を理解しようとしています。このシナリオは、この1000 +文字列を送信するさまざまなシステムがあります。今この文字列はsqlパラメータとして渡され、私のsql update-queryは文字列を特定の列に挿入する必要があります。 – MukeshAnAlsoRan

答えて

15

あなたはバックスラッシュで引用符をエスケープすることができます

"I asked my son's teacher, \"How is my son doing now?\"" 
+1

私はすでに、上記の例は単なるサンプルであり、実際のアプリケーション値はそれ以上であるため、二重引用符の前に手動で「スラッシュ\」や一重引用符を追加することは意味がなく、除外されている1000文字。 – MukeshAnAlsoRan

4

2つの使用単一引用符は、SQL文でそれらをエスケープします。二重引用符が問題になることはありません。

SELECT 'How is my son''s school helping him learn? "Not as good as Stack Overflow would!"' 

印刷:C#とVB SqlCommandオブジェクトで

How is my son's school helping him learn? "Not as good as Stack Overflow would!"

+0

ありがとうマイク。しかし、私はすでに、上記の例は単なるサンプルであり、実際のアプリケーション値はそれ以上であるため、二重引用符の前に手動で「スラッシュ\」や一重引用符を追加すると、 1000文字。 – MukeshAnAlsoRan

+2

文字をエスケープするのが実用的でない場合、エスケープするのはかなり難しいと思います。代わりに、 "と置換置換値を決定して照会を実行できるようにすることもできますが、必要に応じてそれらを正しい値に再置換する必要があります。 – mclark1129

+0

Ya Mike ..私はその程度まで何かを考えましたが、バッチ置換と同様のことについては考えましたが、このシナリオでは過度な操作となり、SQLにはこれを扱う固有の優雅な方法が必要です。 10年前にも存在していた。 – MukeshAnAlsoRan

0

はによっては、このような状況

4

を扱う Parameter.AddWithValueメソッドを実装しますあなたがプログラミングしている言語については、二重引用符を二重引用符で置き換える関数を使うことができます。

だろうPHP例えば:

str_replace('"', '""', $string); 

あなたはSQLを使用するだけで、多分REPLACE()は、あなたが探しているものであることをやろうとしている場合。

だからあなたのクエリは次のようになります:

"UPDATE Table SET columnname = '" & REPLACE(@wstring, '"', '""') & "' where ... blah ... blah " 
1

使用 "REPLACEは、" 特殊文字を削除します。

REPLACE(ColumnName ,' " ','') 

例: -

--query ---

DECLARE @STRING AS VARCHAR(100) 
SET @STRING ='VI''RA""NJA "' 

SELECT @STRING 
SELECT REPLACE(REPLACE(@STRING,'''',''),'"','') AS MY_NAME 

--result ---

VI'RA "" NJA」

0

SET QUOTED_IDENTIFIERがOFFの場合、式内のリテラル文字列は、一重引用符または二重引用符で区切ることができます。

リテラル文字列は二重引用符で区切られている場合

は、文字列は、アポストロフィなどの埋め込み単一引用符を含めることができます。

関連する問題