Estou tentando insert
alguns dados de texto em uma tabela no SQL Server
9.
O texto inclui uma aspas simples (').
Como escapar disso?
Tentei usar duas aspas simples, mas isso me causou alguns erros.
por exemplo. insert into my_table values('hi, my name''s tim.');
sql
sql-server
tsql
delimiter
single-quotes
tim_wonil
fonte
fonte
Respostas:
As aspas simples são escapadas dobrando-as , assim como você nos mostrou em seu exemplo. O SQL a seguir ilustra essa funcionalidade. Eu testei no SQL Server 2008:
Resultados
fonte
Se escapar de uma citação única com outra citação única não estiver funcionando para você (como não ocorreu em uma das minhas
REPLACE()
consultas recentes ), você poderá usarSET QUOTED_IDENTIFIER OFF
antes da sua consulta eSET QUOTED_IDENTIFIER ON
depois da sua consulta.Por exemplo
fonte
E se:
fonte
A duplicação da cotação deveria ter funcionado, por isso é peculiar que não funcionou para você; no entanto, uma alternativa é usar caracteres de aspas duplas, em vez de caracteres simples, ao redor da string. Ou seja,
insert into my_table values("hi, my name's tim."
);fonte
2 maneiras de contornar isso:
pois
'
você pode simplesmente dobrá-lo na string, por exemploselect 'I''m happpy'
- receberá:I'm happy
Para qualquer personagem que você não tem certeza: no servidor sql, você pode obter o unicode de qualquer caractere
select unicode(':')
(mantenha o número)Então, neste caso, você também pode
select 'I'+nchar(39)+'m happpy'
fonte
Outro aspecto a ter cuidado é se ele é realmente armazenado como um ASCII clássico '(ASCII 27) ou Unicode 2019 (que parece semelhante, mas não é o mesmo).
Isso não é muito importante em inserções, mas pode significar o mundo em seleções e atualizações.
Se esse for o valor unicode, o escape da cláusula 'in a WHERE (por exemplo, onde blah =' Workers''s Comp ') retornará como o valor que você está procurando, se o' in "Worker's Comp" for realmente o valor unicode.
Se o seu aplicativo cliente suportar entrada livre de chave, além de copiar e colar, pode ser Unicode em algumas linhas e ASCII em outras!
Uma maneira simples de confirmar isso é fazer algum tipo de consulta aberta que trará de volta o valor que você está procurando e copie e cole-o no bloco de notas ++ ou em outro editor de suporte a Unicode.
A aparência diferente entre o valor ascii e o unicode deve ser óbvia para os olhos, mas se você se inclinar para o anal, ele aparecerá como 27 (ascii) ou 92 (unicode) em um editor hexadecimal.
fonte
Muitos de nós sabemos que o método popular de escapar de aspas simples é dobrá-las facilmente como abaixo.
vamos procurar outras maneiras alternativas de escapar das aspas simples.
Caracteres UNICODE
39 é o caractere UNICODE de aspas simples. Para que possamos usá-lo como abaixo.
2.QUOTED_IDENTIFIER
Outra solução alternativa simples e melhor é usar QUOTED_IDENTIFIER. Quando QUOTED_IDENTIFIER está definido como OFF, as seqüências de caracteres podem ser colocadas entre aspas duplas. Nesse cenário, não precisamos escapar de aspas simples. Portanto, dessa maneira, seria muito útil ao usar muitos valores de string com aspas simples. Será muito útil ao usar tantas linhas de scripts INSERT / UPDATE em que os valores das colunas têm aspas simples.
CONCLUSÃO
Os métodos acima mencionados são aplicáveis ao AZURE e On Premises.
fonte
A seguinte sintaxe escapará de você APENAS UMA aspas:
O resultado será uma citação única. Pode ser muito útil para criar SQL dinâmico :).
fonte
Isso deve funcionar
fonte
Basta inserir um 'antes de qualquer coisa a ser inserida. Será como um caractere de escape no sqlServer
Exemplo: Quando você tem um campo como, eu estou bem . você pode fazer: UPDATE my_table SET row = 'Estou bem.';
fonte
Isso deve funcionar: use uma barra invertida e coloque aspas duplas
fonte
PRINT \"hi, my name's tim.\";
vai funcionar no SSMS? Não funciona e ninguém nunca disse que funciona.