130 votes

Caractère d'échappement dans SQL Server

Je veux utiliser une citation avec un caractère d'échappement. Comment puis-je éviter l'erreur suivante lorsque l'on a un caractère spécial ?

Guillemets non fermés après la chaîne de caractères.

5 votes

Pouvez-vous, s'il vous plaît montrer nous la requête ??

3 votes

148voto

dugokontov Points 959

Vous pouvez échapper à une telle cotation :

select 'it''s escaped'

le résultat sera

it's escaped

0 votes

Ceci devrait être la réponse.

119voto

AdaTheDev Points 53358

S'échapper ' il suffit d'en mettre un autre avant : ''

Comme le montre la deuxième réponse, il est possible d'échapper aux guillemets simples de cette manière :

select 'it''s escaped'

le résultat sera

it's escaped

Si vous concaténé du SQL dans un VARCHAR pour l'exécuter (c'est-à-dire du SQL dynamique), je vous recommande de paramétrer le SQL. Cela présente l'avantage d'aider à se prémunir contre les injections SQL et signifie que vous n'avez pas à vous soucier de l'échappement des 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)

essayez ceci :

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'

31 votes

Pourquoi cette réponse est-elle acceptée ? Elle ne répond pas à la question.

5 votes

@PeterMoore Soit l'OP aurait utilisé la première partie de ma réponse (en doublant les guillemets, comme dans les autres réponses ci-dessous), soit il aurait utilisé l'approche préférée que je recommande pour construire une requête SQL dans une variable de type chaîne de caractères - utiliser le SQL paramétré. Quoi qu'il en soit, les deux sont des réponses à la question

0 votes

Cela ne répond pas à la question. Parfois, l'utilisateur a besoin d'une connexion ODBC, ce qui signifie que vous ne pouvez utiliser que du SQL pur.

57voto

Aniket A Points 521

Vous pouvez définir votre propre caractère d'échappement, mais vous ne pouvez l'utiliser qu'avec un caractère LIKE clause.

Exemple :

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'

Il recherchera ici % dans toute la chaîne et c'est ainsi que l'on peut utiliser ESCAPE identifiant dans SQL Server .

24voto

Seph Points 4047

Il suffit de remplacer ' avec '' à l'intérieur de votre chaîne

SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'

Vous pouvez également utiliser REPLACE(@name, '''', '''''') si le code SQL est généré dynamiquement

Si vous souhaitez vous échapper à l'intérieur d'une instruction like, vous devez utiliser la syntaxe ESCAPE.

Il convient également de mentionner que vous vous exposez à des attaques par injection SQL si vous n'en tenez pas compte. Plus d'informations sur Google ou : http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

0 votes

Et pourtant les réponses de dugokontov ou de RichardPianka n'ont pas de -1 similaire ?

0 votes

@MichaelMunsey essayez-le vous-même : select ' renvoie l'erreur Unclosed quotation mark after the character string '' . Nulle part dans ma réponse je n'utilise " seulement deux ' Je ne sais pas pourquoi ma réponse est la seule à avoir reçu des votes négatifs.

13voto

Richard Pianka Points 1410

Dans MSSQL, les guillemets sont remplacés par des guillemets doubles. '' ou un "" produira un échappé ' y " respectivement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X