web-dev-qa-db-fra.com

Caractère d'échappement dans SQL Server

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

76
esquare

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'
60
AdaTheDev

Vous pouvez échapper à la citation comme ceci:

select 'it''s escaped'

le résultat sera

it's escaped
97
dugokontov

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.

33
Aniket A

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

17
Seph

L'échappement de guillemets dans MSSQL est effectué par un guillemet double. Ainsi, un '' ou un "" produira un ' et " échappés, respectivement.

12
Richard Pianka

Pour que le code soit facile à lire, vous pouvez utiliser les crochets [] pour citer la chaîne contenant ' ou vice-versa.

0
Ben