web-dev-qa-db-fra.com

Comment insérer du texte avec une seule citation SQL Server 2005

Je veux insérer du texte avec guillemets simples .__

36
ramesh

Escape single quote avec un single supplémentaire comme l'a souligné Kirtan 
Et si vous essayez d’exécuter un SQL dynamique (ce qui n’est pas une bonne idée en premier lieu) via sp_executesql, le code ci-dessous vous conviendra.

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

La réponse dépend vraiment de la façon dont vous faites la INSERT.

Si vous spécifiez un littéral SQL, vous devez utiliser la méthode du double tick:

-- 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

Si vous effectuez l'insertion à partir de code, utilisez les paramètres suivants:

// 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();
    }
}

Si vos données contiennent des entrées utilisateur, directes ou indirectes, USE PARAMETERS . Les paramètres protègent contre les attaques par injection SQL. Ne jamais créer de SQL dynamique avec une entrée utilisateur.

19
Brannon

Cela a fonctionné pour moi:

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

Fondamentalement, vous prenez la citation unique que vous souhaitez insérer et vous la remplacez par deux. Donc, si vous voulez insérer une chaîne de texte ('text') et ajouter des guillemets simples autour de celle-ci, ce sera ('' 'text' ''). J'espère que cela t'aides.

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

Ou vous pouvez utiliser une procédure stockée et transmettre le paramètre sous la forme -

usp_Proc1 @Column1 = 'John''s'

Si vous utilisez une requête INSERT et non une procédure stockée, vous devrez échapper la citation avec deux guillemets, sinon c'est OK si vous ne le faites pas.

7
Kirtan

Cette réponse fonctionne dans SQL Server 2005, 2008 et 2012. 

Parfois, la valeur a BEAUCOUP de guillemets simples. Plutôt que d'ajouter un seul devis à côté de chaque devis, comme décrit ci-dessus avec 'John''s'. Et il existe des exemples utilisant la fonction REPLACE pour gérer plusieurs guillemets simples dans une valeur.

Essayez ce qui suit. Il s'agit d'une instruction de mise à jour, mais vous pouvez également l'utiliser dans une instruction 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

Vous avez demandé comment échapper à Apostrophe character (') dans SQL Server. Toutes les réponses ci-dessus font un excellent travail pour expliquer cela.

Toutefois, selon la situation, la Right single quotation mark character (’) peut être appropriée.

_ {(Aucun caractère d'échappement requis)} _

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

• Apostrophe (U + 0027)

Ascii Apostrophe sur Wikipedia

• guillemet simple à droite (U + 2019)

Citation unique Unicode Right sur Wikipedia

0
JohnB