string_escape special single escape escapar dobles comillas characters sql sql-server tsql single-quotes

single - sql server escape special characters



¿Cómo puedo escapar de una sola cita en SQL Server? (9)

Esto debería funcionar

DECLARE @singleQuote CHAR SET @singleQuote = CHAR(39) insert into my_table values(''hi, my name''+ @singleQuote +''s tim.'')

Estoy tratando de insert algunos datos de texto en una tabla en SQL Server 9.

El texto incluye una comilla simple ('').

¿Cómo puedo escapar de eso?

Intenté usar dos comillas simples, pero me arrojó algunos errores.

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



La duplicación de la cita debería haber funcionado, por lo que es peculiar que no haya funcionado para usted; sin embargo, una alternativa es usar caracteres de comillas dobles, en lugar de caracteres simples, alrededor de la cadena. Es decir,

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


Otra cosa a tener en cuenta es si realmente se almacena como un ASCII ''(ASCII 27) o Unicode 2019 clásico (que parece similar, pero no el mismo).

Esto no es un gran problema en inserciones, pero puede significar que el mundo en selecciones y actualizaciones.
Si es el valor de Unicode, entonces el escape del ''en una cláusula WHERE (por ejemplo, donde blah ='' Compensación de los trabajadores '') regresará como si el valor que está buscando no esté allí si el'' en "Compensación del trabajador" es realmente el valor Unicode.

Si su aplicación cliente admite clave libre, así como la entrada basada en copiar y pegar, podría ser Unicode en algunas filas y ASCII en otras.

Una forma sencilla de confirmar esto es haciendo algún tipo de consulta abierta que le devuelva el valor que está buscando, y luego cópielo y péguelo en notepad ++ o en algún otro editor compatible con Unicode.

El aspecto diferente entre el valor de ascii y el de unicode debe ser obvio para los ojos, pero si te inclinas hacia el anal, aparecerá como 27 (ascii) o 92 (unicode) en un editor hexadecimal.


Qué tal si:

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


Si no funciona para usted el hecho de que salga de su presupuesto único con otro (como en el caso de una de mis consultas REPLACE() ), puede usar SET QUOTED_IDENTIFIER OFF antes de su consulta, luego SET QUOTED_IDENTIFIER ON después de su consulta.

Por ejemplo

SET QUOTED_IDENTIFIER OFF; UPDATE TABLE SET NAME = REPLACE(NAME, "''S", "S"); SET QUOTED_IDENTIFIER ON; -- set OFF then ON again


2 formas de solucionar esto:

para '' simplemente puede duplicarlo en la cadena, por ejemplo, select ''I''''m happpy'' -- will get: I''m happy

Para cualquier charactor del que no esté seguro: en el servidor SQL puede obtener un Unicode de Char por select unicode('':'')

Así que en este caso también puedes select ''I''+nchar(39)+''m happpy''


Las comillas simples se escapan duplicándolas , tal como nos mostró en su ejemplo. El siguiente SQL ilustra esta funcionalidad. Lo probé en 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.


string value = "Abhishek''s"; value = Replace(value,"''","''''");