J'essaie de insert
quelques données textuelles dans une table dans SQL Server
9.
Le texte comprend une citation simple (').
Comment puis-je y échapper?
J'ai essayé d'utiliser deux guillemets simples, mais cela m'a jeté des erreurs.
par exemple. insert into my_table values('hi, my name''s tim.');
les guillemets simples sont évités en les doublant, comme vous l'avez montré dans votre exemple. Le code 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
value
==================
hi, my name's tim.
Si échapper votre devis unique avec un autre devis unique ne fonctionne pas (contrairement à l'une de mes récentes requêtes REPLACE()
), vous pouvez utiliser SET QUOTED_IDENTIFIER OFF
avant votre requête, puis 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
Que diriez-vous:
insert into my_table values('hi, my name'+char(39)+'s tim.')
Le dédoublement de la citation aurait dû fonctionner, alors il est étrange que cela ne vous ait pas aidé; Cependant, une alternative consiste à utiliser des caractères de citation doubles, au lieu de simples, autour de la chaîne. C'est à dire.,
insert into my_table values("hi, my name's tim."
);
2 façons de contourner ceci:
pour '
vous pouvez simplement le doubler dans la chaîne, par exemple. select 'I''m happpy' -- will get: I'm happy
Pour tout caractère dont vous n'êtes pas sûr: dans SQL Server, vous pouvez obtenir l'unicode de n'importe quel caractère par select unicode(':')
Donc, ce cas, vous pouvez aussi select 'I'+nchar(39)+'m happpy'
Une autre chose à vérifier est de savoir s'il est réellement stocké comme un classique ASCII '(ASCII 27) ou Unicode 2019 (qui semble similaire, mais pas le même).
Ce n’est pas un gros problème d’insertions, mais cela peut signifier le monde entier sur sélections et mises à jour.
S'il s'agit de la valeur unicode, le fait d'échapper à la clause 'dans une clause WHERE (par exemple, où blah =' Comp 'des travailleurs') retournera comme si la valeur que vous recherchiez n'existait pas si la fonction 'in "de Worker's Comp "est en réalité la valeur unicode.
Si votre application cliente prend en charge les entrées à clé libre, ainsi que les opérations de copier-coller, il pourrait s'agir d'Unicode dans certaines lignes et de ASCII dans d'autres!
Un moyen simple de le confirmer consiste à effectuer une requête ouverte qui ramènera la valeur recherchée, puis à la copier et la coller dans le bloc-notes ++ ou un autre éditeur prenant en charge le codage Unicode.
La différence d'aspect entre la valeur ascii et la valeur unicode devrait être évidente pour les yeux, mais si vous vous penchez vers l'anal, elle apparaîtra sous la forme 27 (ascii) ou 92 (unicode) dans un éditeur hexadécimal.
Cela devrait fonctionner: utilisez une barre oblique inversée et mettez une citation double
"UPDATE my_table SET row =\"hi, my name's tim.\";
Il suffit d'insérer un 'avant quoi que ce soit à insérer. Ce sera comme un caractère d'échappement dans sqlServer
Exemple: Lorsque vous avez un champ en tant que, ça va. vous pouvez faire: UPDATE my_table SET row = 'Je vais bien.';
Cela devrait marcher
DECLARE @singleQuote CHAR
SET @singleQuote = CHAR(39)
insert into my_table values('hi, my name'+ @singleQuote +'s tim.')