Quero usar citação com caractere de escape. Como eu posso fazer?
Recebi um erro no SQL Server
Aspas não fechadas após a sequência de caracteres.
Estou escrevendo uma consulta SQL em um varchar
variável, mas recebi esse erro:
Aspas não fechadas após a sequência de caracteres.
Quero usar aspas como caractere de escape.
sql-server
escaping
char
e quadrado
fonte
fonte
Respostas:
Para escapar
'
você simplesmente precisa colocar outro antes:''
Como mostra a segunda resposta, é possível escapar das aspas simples assim:
resultado será
Se você estiver concatenando SQL em um VARCHAR para executar (ou seja, SQL dinâmico), recomendo parametrizar o SQL. Isso tem o benefício de ajudar na proteção contra a injeção de SQL e ainda significa que você não precisa se preocupar em escapar aspas como esta (o que você faz dobrando as aspas).
por exemplo, em vez de fazer
tente isto:
fonte
Você pode escapar da citação assim:
resultado será
fonte
Você pode definir seu caractere de escape, mas só pode usá-lo com uma
LIKE
cláusula.Exemplo:
Aqui ele pesquisará por
%
toda a string e é assim que se pode usar oESCAPE
identificador emSQL Server
.fonte
Você precisa apenas substituir
'
por''
dentro de sua cordaVocê também pode usar
REPLACE(@name, '''', '''''')
se gerar o SQL dinamicamenteSe você quiser escapar dentro de uma instrução like, você precisa usar a sintaxe ESCAPE
Também vale a pena mencionar que você está se deixando vulnerável a ataques de injeção de SQL se não considerar isso. Mais informações no Google ou: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F
fonte
select '
retorna o erroUnclosed quotation mark after the character string ''
. Em nenhuma parte da minha resposta utilizo"
apenas duas'
, não tenho certeza de por que a minha é a única resposta com votos negativos.As aspas de escape no MSSQL são feitas por aspas duplas, portanto, a
''
ou a""
produzirá uma com escape'
e"
, respectivamente.fonte
Você pode usar o
**\**
caractere antes do valor que deseja escapar, por exemploinsert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
fonte
Se você quiser escapar da entrada do usuário em uma variável, você pode fazer o seguinte no SQL
O @userinput agora será escapado com uma aspa simples extra para cada ocorrência de aspas
fonte
DE: SQL Server Escape an Underscore
fonte
Para manter o código fácil de ler, você pode usar colchetes
[]
para citar a string que contém'
ou vice-versa.fonte