Question Comment puis-je échapper une seule citation dans SQL Server?


j'essaye de insert certaines données de texte dans une table SQL Server 9.

Le texte comprend une seule citation (').

Comment puis-je échapper à cela?

J'ai essayé d'utiliser deux guillemets simples, mais cela m'a donné quelques erreurs.

par exemple. insert into my_table values('hi, my name''s tim.');


680
2017-10-19 01:18


origine


Réponses:


Les guillemets simples sont échappés en les doublant, comme vous nous l'avez montré dans votre exemple. Le SQL suivant illustre cette fonctionnalité. Je l'ai testé sur SQL Server 2008:

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name''s tim.')

SELECT * FROM @my_table

Résultats

value
==================
hi, my name's tim.

996
2017-10-19 01:30



Si échapper votre citation unique avec une autre citation unique ne fonctionne pas pour vous (comme ce n'était pas le cas pour l'un de mes récents REPLACE() requêtes), vous pouvez utiliser SET QUOTED_IDENTIFIER OFF avant votre requête, alors SET QUOTED_IDENTIFIER ON après votre requête.

Par exemple

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again

53
2017-09-05 23:20



Que diriez-vous:

insert into my_table values('hi, my name'+char(39)+'s tim.')

31
2017-10-19 01:24



Le doublage de la citation aurait dû marcher, donc c'est curieux que ça ne marche pas pour vous; Cependant, une alternative consiste à utiliser des guillemets doubles, au lieu de simples, autour de la chaîne. C'est à dire.,

insert into my_table values("hi, my name's tim.")


16
2017-10-19 01:33



Aussi, une autre chose à faire attention est de savoir si oui ou non il est vraiment stocké comme un ASCII classique (ASCII 27) ou Unicode 2019 (qui ressemble, mais pas le même).

Ce n'est pas une grosse affaire sur les inserts, mais cela peut signifier le monde sur les sélections et les mises à jour.
 Si c'est la valeur unicode alors échapper la clause 'dans une WHERE (par exemple où blah =' Workers 'Comp') retournera comme la valeur que vous recherchez n'est pas là si le 'in' Worker's Comp "est réellement le valeur unicode.

Si votre application cliente prend en charge l'entrée libre-clé, ainsi que la copie et le collage, elle peut être Unicode dans certaines lignes et ASCII dans d'autres!

Un moyen simple de confirmer cela est de faire une sorte de requête ouverte qui va ramener la valeur que vous recherchez, puis copiez et collez cela dans notepad ++ ou un autre éditeur de support unicode.

 L'apparence différente entre la valeur ascii et l'unicode devrait être évidente pour les yeux, mais si vous penchez vers l'anal, il apparaîtra comme 27 (ascii) ou 92 (unicode) dans un éditeur hexadécimal.


4
2017-09-01 21:45



Deux façons de contourner ce problème:


pour ' vous pouvez simplement le doubler dans la chaîne, par ex. select 'I''m happpy' -- will get: I'm happy


Pour tout charactor dont vous n'êtes pas sûr: dans le serveur SQL, vous pouvez obtenir unicode de n'importe quel char par select unicode(':')

Donc, ce cas vous pouvez aussi select 'I'+nchar(39)+'m happpy'


2
2018-03-15 01:41



Cela devrait fonctionner

DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')

0
2017-11-04 20:41