web-dev-qa-db-ja.com

SQL Server 2005の単一引用符でテキストを挿入する方法

SQL Server 2005データベースのテーブルに単一引用符Eg john'sを含むテキストを挿入したい

36
ramesh

キルタンが指摘したように、単一引用符を追加の単一引用符でエスケープします
sp_executesqlを使用して動的SQLを実行しようとする場合(そもそも良い考えではありません)、以下のコードが機能します。

sp_executesql N'INSERT INTO SomeTable (SomeColumn) VALUES (''John''''s'')'
23
Binoj Antony

答えはINSERTの実行方法によって異なります。

SQLリテラルを指定している場合は、二重ティックアプローチを使用する必要があります。

-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John''s')

-- Using a parameter, with a direct insert
DECLARE @Value varchar(50)
SET @Value = 'John''s'
INSERT INTO Table1 (Column1) VALUES (@Value)

-- Using a parameter, with dynamic SQL
DECLARE @Value varchar(50)
SET @Value = 'John''s'
EXEC sp_executesql 'INSERT INTO Table1 (Column1) VALUES (@p1)', '@p1 varchar(50)', @Value

コードからINSERTを実行している場合、パラメーターを使用します。

// Sample ADO.NET
using (SqlConnection conn = new SqlConnection(connectionString)) {
    conn.Open();
    using (SqlCommand command = conn.CreateCommand()) {
        command.CommandText = "INSERT INTO Table1 (Column1) VALUES (@Value)";

        command.Parameters.AddWithValue("@Value", "John's");

        command.ExecuteNonQuery();
    }
}

データに直接または間接のユーザー入力が含まれている場合、SE PARAMETERS。パラメーターは、SQLインジェクション攻撃から保護します。ユーザー入力を使用して動的SQLを構築することはありません。

19
Brannon

これは私のために働いた:

  INSERT INTO [TABLE]
  VALUES ('text','''test.com''', 1)

基本的に、挿入したい一重引用符を取り、それを2つに置き換えます。したがって、テキストの文字列( 'text')を挿入し、その周りに一重引用符を追加する場合、それは( '' 'text' '')になります。お役に立てれば。

16
jitterska
INSERT INTO Table1 (Column1) VALUES ('John''s')

または、ストアドプロシージャを使用して、パラメータを-として渡すことができます

usp_Proc1 @Column1 = 'John''s'

ストアドプロシージャではなくINSERTクエリを使用している場合、引用符を2つの引用符でエスケープする必要があります。そうしない場合は引用符でエスケープする必要があります。

7
Kirtan

この回答は、SQL Server 2005、2008、2012で機能します。

値には多くの単一引用符が含まれる場合があります。上記の'John''s'で説明したように、各単一引用符の隣に単一引用符を追加するのではなく。また、REPLACE関数を使用して、値内の多くの単一引用符を処理する例があります。

以下を試してください。これは更新ステートメントですが、INSERTステートメントでも使用できます。

SET QUOTED_IDENTIFIER OFF

DECLARE @s VARCHAR(1000)

SET @s = "SiteId:'1'; Rvc:'6'; Chk:'1832'; TrEmp:'150'; WsId:'81'; TtlDue:'-9.40'; TtlDsc:'0'; TtlSvc:'0'; TtlTax:'-0.88'; TtlPay:'0'; TipAmt:'0.00'; SvcSeq:'09'; ReTx:'N'; TraceId:'160110124347N091832';"


UPDATE TransactionPaymentPrompt
set PromptData = @s

from TransactionPaymentPrompt tpp with (nolock)
where tpp.TransactionID = '106627343'
1
Matt

SQL ServerでApostrophe character (')をエスケープする方法を尋ねました。上記のすべての答えは、それを説明する優れた仕事をしています。

ただし、状況によっては、Right single quotation mark character (’)が適切な場合があります。

(エスケープ文字は不要)

-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John’s')

•アポストロフィ(U + 0027)

ウィキペディアのアスキーアポストロフィ

•右の単一引用符(U + 2019)

WikipediaのUnicode右単一引用符

0
JohnB