SQL Server 2005データベースのテーブルに単一引用符Eg john'sを含むテキストを挿入したい
キルタンが指摘したように、単一引用符を追加の単一引用符でエスケープします
sp_executesqlを使用して動的SQLを実行しようとする場合(そもそも良い考えではありません)、以下のコードが機能します。
sp_executesql N'INSERT INTO SomeTable (SomeColumn) VALUES (''John''''s'')'
答えは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を構築することはありません。
これは私のために働いた:
INSERT INTO [TABLE]
VALUES ('text','''test.com''', 1)
基本的に、挿入したい一重引用符を取り、それを2つに置き換えます。したがって、テキストの文字列( 'text')を挿入し、その周りに一重引用符を追加する場合、それは( '' 'text' '')になります。お役に立てれば。
INSERT INTO Table1 (Column1) VALUES ('John''s')
または、ストアドプロシージャを使用して、パラメータを-として渡すことができます
usp_Proc1 @Column1 = 'John''s'
ストアドプロシージャではなくINSERTクエリを使用している場合、引用符を2つの引用符でエスケープする必要があります。そうしない場合は引用符でエスケープする必要があります。
この回答は、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'
SQL ServerでApostrophe character (')
をエスケープする方法を尋ねました。上記のすべての答えは、それを説明する優れた仕事をしています。
ただし、状況によっては、Right single quotation mark character (’)
が適切な場合があります。
(エスケープ文字は不要)
-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John’s')
•アポストロフィ(U + 0027)
•右の単一引用符(U + 2019)