Je veux utiliser une citation avec un caractère d'échappement. Comment puis-je faire?
J'ai reçu une erreur dans SQL Server
Unclosed guillemet après la chaîne de caractères.
J'écris une requête SQL dans une variable varchar mais j'ai reçu cette erreur:
Unclosed guillemet après la chaîne de caractères.
Je veux utiliser des guillemets comme caractère d'échappement.
Merci d'avance
Si vous concaténez SQL dans un VARCHAR pour l’exécuter (c’est-à-dire un SQL dynamique), nous vous conseillons de paramétrer le SQL. Cela a l'avantage de vous protéger contre l'injection SQL et vous évite d'avoir à vous échapper de guillemets comme celui-ci (ce que vous faites en doublant les guillemets).
par exemple. au lieu de faire
DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)
essaye ça:
DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'
Vous pouvez échapper à la citation comme ceci:
select 'it''s escaped'
le résultat sera
it's escaped
Vous pouvez définir votre caractère d'échappement, mais vous ne pouvez l'utiliser qu'avec une clause LIKE
.
Exemple:
SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'
Ici, il cherchera %
dans la chaîne entière et c’est ainsi que l’on pourra utiliser ESCAPE
identifiant dans SQL Server
.
Vous devez simplement remplacer '
par ''
dans votre chaîne
SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'
Vous pouvez également utiliser REPLACE(@name, '''', '''''')
si vous générez le code SQL de manière dynamique.
Si vous voulez vous échapper dans une instruction similaire, vous devez utiliser la syntaxe ESCAPE.
Il convient également de mentionner que vous vous laissez ouvert aux attaques par injection SQL si vous ne le considérez pas. Plus d'infos sur Google ou: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
L'échappement de guillemets dans MSSQL est effectué par un guillemet double. Ainsi, un ''
ou un ""
produira un '
et "
échappés, respectivement.
Pour que le code soit facile à lire, vous pouvez utiliser les crochets []
pour citer la chaîne contenant '
ou vice-versa.