一重引用符でテキストを挿入したい例:john's to table in sql server 2005 database
6 に答える
Kirtanが指摘したように、単一引用符を追加して単一引用符をエスケープし
ますそして、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();
}
}
データに直接または間接のユーザー入力が含まれている場合は、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 つの引用符で引用符をエスケープする必要があります。