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.
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.
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'
@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
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.
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
.
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
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.
5 votes
Pouvez-vous, s'il vous plaît montrer nous la requête ??
3 votes
Duplicata possible de Comment échapper à un guillemet simple dans SQL Server ?