Je souhaite 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 varchar
variable mais j'ai reçu cette erreur:
Unclosed guillemet après la chaîne de caractères.
Je souhaite utiliser des guillemets comme caractère d'échappement.
sql-server
escaping
char
carré
la source
la source
Réponses:
Pour
'
vous échapper, vous devez simplement en mettre un autre avant:''
Comme le montre la deuxième réponse, il est possible d'échapper aux guillemets simples comme ceci:
le résultat sera
Si vous concaténez SQL dans un VARCHAR à exécuter (c'est-à-dire SQL dynamique), je vous recommande de paramétrer le SQL. Cela a l'avantage d'aider à se prémunir contre l'injection SQL et signifie que vous n'avez pas à vous soucier d'échapper des guillemets comme celui-ci (ce que vous faites en doublant les guillemets).
par exemple au lieu de faire
essaye ça:
la source
Vous pouvez échapper à la citation comme ceci:
le résultat sera
la source
Vous pouvez définir votre caractère d'échappement, mais vous ne pouvez l'utiliser qu'avec une
LIKE
clause.Exemple:
Ici, il recherchera
%
dans toute la chaîne et c'est ainsi que l'on peut utiliser l'ESCAPE
identifiant dansSQL Server
.la source
Vous devez simplement remplacer
'
par à l'''
intérieur de votre chaîneVous pouvez également utiliser
REPLACE(@name, '''', '''''')
si vous générez le SQL dynamiquementSi vous souhaitez vous échapper dans une instruction similaire, vous devez utiliser la syntaxe ESCAPE
Il convient également de mentionner que vous vous exposez aux attaques par injection SQL si vous ne l'envisagez pas. Plus d'informations sur Google ou: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
la source
select '
renvoie l'erreurUnclosed quotation mark after the character string ''
. Nulle part dans ma réponse je n'utilise"
que deux'
, je ne sais pas pourquoi la mienne est la seule réponse avec des votes négatifs.L'échappement des guillemets dans MSSQL se fait par un guillemet double, donc a
''
ou a""
produira un échappé'
et"
, respectivement.la source
Vous pouvez utiliser le
**\**
caractère avant la valeur que vous souhaitez échapper, par exempleinsert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
la source
Si vous voulez échapper à l'entrée utilisateur dans une variable, vous pouvez faire comme ci-dessous dans SQL
Le @userinput sera maintenant échappé avec un guillemet simple supplémentaire pour chaque occurrence d'un devis
la source
FROM: SQL Server échapper à un trait de soulignement
la source
Pour que le code reste facile à lire, vous pouvez utiliser des crochets
[]
pour citer la chaîne contenant'
ou vice versa.la source