Pergunta

eu estou tentando insert Alguns dados de texto em uma tabela em SQL Server 9.

O texto inclui uma única citação (').

Como faço para escapar disso?

Tentei usar duas citações únicas, mas isso me deu alguns erros.

por exemplo. insert into my_table values('hi, my name''s tim.');

Foi útil?

Solução

Citações únicas são escapadas dobrando -as, assim como você nos mostrou no seu exemplo. O seguinte SQL ilustra essa funcionalidade. Eu testei no SQL Server 2008:

DECLARE @my_table TABLE (
    [value] VARCHAR(200)
)

INSERT INTO @my_table VALUES ('hi, my name''s tim.')

SELECT * FROM @my_table

Resultados

value
==================
hi, my name's tim.

Outras dicas

Se escapar da sua única citação com outra única citação não está funcionando para você (como se não fosse para um dos meus recentes REPLACE() consultas), você pode usar SET QUOTED_IDENTIFIER OFF Antes de sua consulta, então SET QUOTED_IDENTIFIER ON Depois de sua consulta.

Por exemplo

SET QUOTED_IDENTIFIER OFF;

UPDATE TABLE SET NAME = REPLACE(NAME, "'S", "S");

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again

Que tal:

insert into my_table values('hi, my name'+char(39)+'s tim.')

A duplicação da citação deveria ter funcionado, por isso é peculiar que não funcionou para você; No entanto, uma alternativa está usando caracteres de cotação dupla, em vez de solteiros, ao redor da string. Ou seja,

insert into my_table values("hi, my name's tim.");

2 maneiras de contornar isso:


por ' você pode simplesmente dobrá -lo na string, por exemploselect 'I''m happpy' -- will get: I'm happy


Para qualquer charactor que você não tenha certeza de: No SQL Server, você pode obter qualquer unicode de char por select unicode(':')

Então, neste caso, você também pode select 'I'+nchar(39)+'m happpy'

Além disso, outra coisa a ter cuidado é se é realmente armazenado como um ASCII clássico (ASCII 27) ou Unicode 2019 (que parece semelhante, mas não o mesmo).

Isso não é um grande problema em inserções, mas pode significar o mundo em selecionar e atualizações.
Se for o valor do Unicode, escapar da cláusula 'em uma cláusula onde (por exemplo, onde Blah =' Comp 'do' trabalhador ') retornará como o valor que você está procurando não está lá se o' em 'Comp do trabalhador' for na verdade o valor unicode.

Se o seu aplicativo cliente suportar a chave gratuita, bem como a entrada e a colagem, ele poderá ser unicode em algumas linhas e ASCII em outros!

Uma maneira simples de confirmar isso é fazendo algum tipo de consulta aberta que trará de volta o valor que você está procurando e, em seguida, copie e coloque isso no Notepad ++ ou em algum outro editor de suporte do Unicode.

A aparência diferente entre o valor ASCII e o unicode deve ser óbvio para os olhos, mas se você se inclinar para o anal, ele aparecerá como 27 (ASCII) ou 92 (Unicode) em um editor Hex.

Isso deve funcionar: use uma barra traseira e coloque uma cotação dupla

"UPDATE my_table SET row =\"hi, my name's tim.\";

Isso deve funcionar

DECLARE @singleQuote CHAR 
SET @singleQuote =  CHAR(39)

insert into my_table values('hi, my name'+ @singleQuote +'s tim.')

Basta inserir um 'antes de qualquer coisa a ser inserida. Será como um personagem de fuga no sqlserver

Exemplo: quando você tem um campo como, Estou bem. Você pode fazer: atualizar my_table set linha = 'estou bem.';

string value = "Abhishek's";

value = Replace(value,"'","''");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top