Carácter de escape en SQL Server


95

Quiero usar una cita con carácter de escape. ¿Como lo puedo hacer?

He recibido un error en SQL Server

Comillas sin cerrar después de la cadena de caracteres.

Estoy escribiendo una consulta SQL en una varcharvariable pero he recibido ese error:

Comillas sin cerrar después de la cadena de caracteres.

Quiero usar comillas como carácter de escape.


4
Puede usted por favor mostrar nosotros la consulta ??
marc_s

Respuestas:


79

Para escapar 'simplemente necesitas poner otro antes:''

Como muestra la segunda respuesta, es posible escapar de las comillas simples como esta:

select 'it''s escaped'

el resultado será

it's escaped

Si está concatenando SQL en un VARCHAR para ejecutar (es decir, SQL dinámico), le recomendaría parametrizar el SQL. Esto tiene el beneficio de ayudar a protegerse contra la inyección de SQL y significa que no tiene que preocuparse por escapar de las citas como esta (lo que hace al duplicar las citas).

por ejemplo, en lugar de hacer

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = ''AAA'''
EXECUTE(@SQL)

prueba esto:

DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'SELECT * FROM MyTable WHERE Field1 = @Field1'
EXECUTE sp_executesql @SQL, N'@Field1 VARCHAR(10)', 'AAA'

30
¿Por qué es esta la respuesta aceptada? No responde a la pregunta.
Peter Moore

3
@PeterMoore O el OP habría usado la primera parte de mi respuesta (duplicando las comillas, según otras respuestas a continuación), o habría usado el enfoque preferido que recomendé para construir una consulta SQL en una variable de cadena: usar parametrizado SQL. De cualquier manera, ambos son respuestas a la pregunta
AdaTheDev

No responde a la pregunta. A veces, el usuario necesita una conexión ODBC, lo que significa que solo puede usar SQL puro.
Tony

Respuesta editada para que sea más clara y se ajuste mejor a la pregunta
Anterior

123

Puede escapar de una cita como esta:

select 'it''s escaped'

el resultado será

it's escaped

Esta debería ser la respuesta.
Tony

46

Puede definir su carácter de escape, pero solo puede usarlo con una LIKEcláusula.

Ejemplo:

SELECT columns FROM table
WHERE column LIKE '%\%%' ESCAPE '\'

Aquí buscará %en una cadena completa y así es como se puede usar el ESCAPEidentificador en SQL Server.


21

Solo necesitas reemplazar 'con el ''interior de tu cuerda

SELECT colA, colB, colC
FROM tableD
WHERE colA = 'John''s Mobile'

También puede usar REPLACE(@name, '''', '''''')si genera el SQL dinámicamente

Si desea escapar dentro de una declaración similar, debe usar la sintaxis ESCAPE

También vale la pena mencionar que se está dejando abierto a ataques de inyección SQL si no lo considera. Más información en Google o: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F


y, sin embargo, las respuestas de dugokontov o RichardPianka no tienen un -1 similar?
Seph

@MichaelMunsey Pruébelo usted mismo: select 'devuelve el error Unclosed quotation mark after the character string ''. En ninguna parte de mi respuesta utilizo "solo dos ', no estoy seguro de por qué la mía es la única respuesta con votos negativos.
Seph

12

El escape de las comillas en MSSQL se realiza mediante comillas dobles, por lo que a ''o a ""producirán un escape 'y ", respectivamente.


0

Puede usar el **\**carácter antes del valor del que desea escapar, por ejemplo insert into msglog(recipient) values('Mr. O\'riely') select * from msglog where recipient = 'Mr. O\'riely'


0

Si desea escapar de la entrada del usuario en una variable, puede hacer lo siguiente dentro de SQL

  Set @userinput = replace(@userinput,'''','''''')

El @userinput ahora se escapará con una cotización única adicional por cada aparición de una cotización



-2

Para que el código sea fácil de leer, puede usar corchetes []para citar la cadena que lo contiene 'o viceversa.


Esto es incorrecto. Los corchetes funcionan con caracteres ilegales en los nombres de campo, tabla o esquema.
Jamie Marshall

Sí, tienes razón, es para los nombres de los objetos, no para el contenido de las cadenas. Debo leer mal la pregunta.
Ben
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.