Estoy tratando de insert
ingresar 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.');
sql
sql-server
tsql
delimiter
single-quotes
tim_wonil
fuente
fuente
Respuestas:
Las comillas simples se escapan al duplicarlas , tal como nos mostró en su ejemplo. El siguiente SQL ilustra esta funcionalidad. Lo probé en SQL Server 2008:
Resultados
fuente
Si escapar de su cita simple con otra cita simple no funciona para usted (como no lo hizo para una de mis
REPLACE()
consultas recientes ), puede usarlaSET QUOTED_IDENTIFIER OFF
antes de su consulta, luegoSET QUOTED_IDENTIFIER ON
después de su consulta.Por ejemplo
fuente
Qué tal si:
fuente
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 comillas dobles, en lugar de simples, alrededor de la cadena. Es decir,
insert into my_table values("hi, my name's tim."
);fuente
2 formas de solucionar esto:
ya
'
que simplemente puede duplicarlo en la cadena, por ejemploselect 'I''m happpy'
, obtendrá:I'm happy
Para cualquier personaje del que no esté seguro: en el servidor sql puede obtener unicode de cualquier carácter
select unicode(':')
(mantenga el número)Entonces este caso también puedes
select 'I'+nchar(39)+'m happpy'
fuente
También otra cosa a tener en cuenta es si realmente se almacena como un ASCII clásico (ASCII 27) o Unicode 2019 (que se ve similar, pero no el mismo).
Esto no es un gran problema con las inserciones, pero puede significar el mundo en las selecciones y actualizaciones.
Si es el valor Unicode, entonces escapar de 'en una cláusula WHERE (por ejemplo, donde blah =' Compensación de los trabajadores ') devolverá como si el valor que está buscando no esté allí si' en 'Compensación de los trabajadores' es realmente el valor unicode.
Si su aplicación cliente admite claves libres, además de copiar y pegar entradas basadas, ¡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 recuperará el valor que está buscando, y luego copie y pegue eso en notepad ++ o algún otro editor de soporte unicode.
La apariencia diferente entre el valor ASCII y el Unicode debería ser obvio para los ojos, pero si se inclina hacia el anal, aparecerá como 27 (ASCII) o 92 (Unicode) en un editor hexadecimal.
fuente
Muchos de nosotros sabemos que el método popular para escapar de las comillas simples es doblarlas fácilmente como a continuación.
Vamos a ver algunas otras formas alternativas de escapar de las comillas simples.
1. Personajes de UNICODE
39 es el carácter UNICODE de Single Quote. Entonces podemos usarlo como a continuación.
2.IDENTIFICADOR_COTADO
Otra solución alternativa simple y mejor es usar QUOTED_IDENTIFIER. Cuando QUOTED_IDENTIFIER se establece en OFF, las cadenas se pueden encerrar entre comillas dobles. En este escenario, no necesitamos escapar de comillas simples. Por lo tanto, de esta manera sería muy útil al usar muchos valores de cadena con comillas simples. Será muy útil al usar tantas líneas de scripts INSERT / UPDATE donde los valores de columna tienen comillas simples.
CONCLUSIÓN
Los métodos mencionados anteriormente son aplicables tanto a AZURE como a las instalaciones.
fuente
La siguiente sintaxis le escapará SOLO UNA comilla:
El resultado será una cita simple. Puede ser muy útil para crear SQL dinámico :).
fuente
Esto debería funcionar
fuente
Simplemente inserte un 'antes de insertar cualquier cosa. Será como un personaje de escape en sqlServer
Ejemplo: cuando tienes un campo como, estoy bien . puede hacer: ACTUALIZAR my_table SET row = 'Estoy bien';
fuente
Esto debería funcionar: use una barra diagonal inversa y ponga una comilla doble
fuente
PRINT \"hi, my name's tim.\";
va a funcionar en SSMS? No funciona en absoluto y nadie ha dicho que funcione.