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.'');
Estoy de acuerdo con Cory Larson. Cuando estoy usando SQL Server 2005 , uso la comilla simple para escapar de la comilla simple. Suena raro, pero funciona para mí. Intenta con eso.
Referencia: SQL Server 2005 escapando cotizaciones
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,"''","''''");