Pregunta ¿Cómo evito una cita simple en SQL Server?


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

El texto incluye una comilla simple (').

¿Cómo escapo eso?

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

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


680
2017-10-19 01:18


origen


Respuestas:


Las comillas simples se escapan al duplicarlas, tal como nos lo has mostrado en tu 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.

996
2017-10-19 01:30



Si escapa de su presupuesto único con otro presupuesto único no le funciona (como no sucedió en uno de mis recientes REPLACE() consultas), puede usar SET QUOTED_IDENTIFIER OFF antes de su consulta, entonces SET QUOTED_IDENTIFIER ON después de tu consulta.

Por ejemplo

SET QUOTED_IDENTIFIER OFF;

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

SET QUOTED_IDENTIFIER ON;
-- set OFF then ON again

53
2017-09-05 23:20



Qué tal si:

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

31
2017-10-19 01:24



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

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


16
2017-10-19 01:33



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

Este no es un gran problema en las inserciones, pero puede significar el mundo en selecciones y actualizaciones.
 Si se trata del valor Unicode, entonces se saldrá de la cláusula 'in a WHERE' (por ejemplo, donde blah = 'Workers' Comp ') como si el valor que está buscando no está allí si el' en 'Worker's Comp' 'es realmente el valor unicode

Si su aplicación cliente es compatible con la clave gratuita, así como con la entrada basada en copiar y pegar, ¡podría ser Unicode en algunas filas y ASCII en otras!

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

 La apariencia diferente entre el valor ascii y el unicode debe ser obvia para los ojos, pero si te inclinas hacia el anal, se mostrará como 27 (ascii) o 92 (unicode) en un editor hexadecimal.


4
2017-09-01 21:45



2 formas de evitar esto:


para ' simplemente puede doblarlo en la cadena, p. select 'I''m happpy' -- will get: I'm happy


Para cualquier personaje del que no estés seguro: en el servidor sql puedes obtener unicode de un char por select unicode(':')

Entonces este caso también puedes select 'I'+nchar(39)+'m happpy'


2
2018-03-15 01:41



Esto debería funcionar

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

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

0
2017-11-04 20:41



Estoy de acuerdo con Cory Larson. Cuando estoy usando SQL Server 2005 Utilizo la comilla simple para escapar de la comilla simple. Suena raro, pero funciona para mí. Prueba con eso

Referencia: Citas de escape de SQL Server 2005


-4
2017-10-19 06:42



string value = "Abhishek's";

value = Replace(value,"'","''");

-7
2018-03-18 08:34