Question

Je suis en train de insert dans SQL Server 9 des données textuelles dans une table.

Le texte comprend une apostrophe ( ').

Comment puis-je échapper ça?

J'ai essayé d'utiliser deux guillemets simples, mais il me lançai quelques erreurs.

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

Était-ce utile?

La solution

Les guillemets simples sont échappés en les doublant , comme vous nous 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.

Autres conseils

Si votre fuite guillemet simple avec une autre citation unique ne fonctionne pas pour vous (comme il ne l'a pas pour une de mes récentes requêtes REPLACE()), vous pouvez utiliser SET QUOTED_IDENTIFIER OFF avant votre requête, SET QUOTED_IDENTIFIER ON puis 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

Que diriez-vous:

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

Le dédoublement de la citation devrait avoir travaillé, il est donc étrange que cela n'a pas fonctionné pour vous; cependant, une alternative est d'utiliser des caractères à double guillemets, au lieu de les simples, autour de la chaîne. I.e..

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

2 façons de contourner ce problème:


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


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

Alors ce cas, vous pouvez également select 'I'+nchar(39)+'m happpy'

Et une autre chose à faire attention est de savoir si oui ou non il est vraiment stocké comme ASCII classique '(ASCII 27) ou Unicode 2019 (qui ressemble, mais pas le même).
Ce n'est pas un gros problème sur les inserts, mais cela peut signifier le monde et mises à jour sur sélectionne.
Si c'est la valeur unicode échapper alors « dans une clause WHERE (par exemple, où blah = 'ouvriers de Comp ») retourne comme la valeur que vous recherchez est pas là si le «dans « Comp du travailleur » est en fait la valeur unicode.
Si votre application client prend en charge sans clé, ainsi que copier et coller l'entrée en fonction, il pourrait être Unicode dans certaines lignes, et ASCII dans d'autres!
Une façon simple de confirmer est en faisant une sorte de requête ouverte qui ended ramènera la valeur que vous recherchez, puis copier et coller dans notepad ++ ou un autre éditeur de support unicode.
L'aspect différent entre la valeur ascii et la version unicode devrait être évident aux yeux, mais si vous vous penchez vers l'anale, il sera affiché comme 27 (ascii) ou 92 (unicode) dans un éditeur hexadécimal.

Cela devrait fonctionner: utiliser une barre oblique arrière et mettre un guillemet

"UPDATE my_table SET row =\"hi, my name's tim.\";

Cela devrait fonctionner

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

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

Il suffit d'insérer un «avant tout à insérer. Ce sera comme un caractère d'échappement dans SQL Server

Exemple: Lorsque vous avez un terrain, Je suis bien . tu peux faire: UPDATE my_table ligne SET = 'I''m bien.';

string value = "Abhishek's";

value = Replace(value,"'","''");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top