36

一重引用符でテキストを挿入したい例:john's to table in sql server 2005 database

4

6 に答える 6

23

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

sp_executesql N'INSERT INTO SomeTable (SomeColumn) VALUES (''John''''s'')'
于 2009-04-22T04:53:36.983 に答える
19

答えは本当にあなたがどのようにやっているかに依存します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を構築することは決してありません。

于 2009-04-22T05:12:37.640 に答える
16

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

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

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

于 2011-06-24T17:06:28.997 に答える
7
INSERT INTO Table1 (Column1) VALUES ('John''s')

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

usp_Proc1 @Column1 = 'John''s'

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

于 2009-04-22T04:34:58.557 に答える