2011-02-28 19 views
40

Deseo utilizar la cita con carácter de escape. ¿Como lo puedo hacer?Carácter de escape en SQL Server

he recibido de error en SQL Server

Unclosed quotation mark after the character string.

estoy escribiendo consulta SQL en una variable varchar, pero he recibido ese error:

Unclosed quotation mark after the character string.

Quiero usar comillas como char de escape .

Gracias de antemano

+1

¿Puede por favor ** mostrar ** la consulta? –

+0

Posible duplicado de [¿Cómo puedo evitar una cita única en SQL Server?] (Https://stackoverflow.com/questions/1586560/how-do-i-escape-a-single-quote-in-sql-server) –

Respuesta

39

Si está concatenando SQL en un VARCHAR para ejecutar (es decir, SQL dinámico), le recomiendo que parametrice el SQL. Esto tiene el beneficio de ayudar a proteger contra la inyección de SQL plus, lo que significa que no tiene que preocuparse por evitar las cotizaciones como esta (lo que hace al duplicar las comillas).

p. Ej. en lugar de hacer

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

intente esto:

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

¿Por qué es esta la respuesta aceptada? No responde la pregunta. –

+0

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

9

Escapar cotizaciones en MSSQL se realiza mediante una doble cita, por lo que un '' o una "" producirá uno escapó ' y ", respectivamente.

57

se puede escapar de la cita así:

select 'it''s escaped' 

resultado será

it's escaped 
+1

simple, dulce y limpia +1, gracias :) –

11

Es necesario simplemente reemplazar ' con '' dentro de su cadena de

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

También puede utilizar REPLACE(@name, '''', '''''') si la generación del SQL de forma dinámica

Si quieres escapar dentro de una sentencia como entonces es necesario utilizar la sintaxis de escape

Es también digno de mención que te estás exponiendo a ataques de inyección SQL si no lo consideras. Más información en Google o: http://it.toolbox.com/wiki/index.php/How_do_I_escape_single_quotes_in_SQL_queries%3F

+1

podría el -1 dar un comentario? – Seph

+0

¿Otra vez con otro -1 y sin comentarios? nada de lo que dije es incorrecto, ni es una nueva publicación en un hilo viejo dado que publiqué esto hace casi tres años completos. – Seph

+0

apostrophe! = Comillas –

19

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

Ejemplo:

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

Aquí se buscará % en cadena entera y esto es cómo se puede utilizar ESCAPE identificador en SQL Server.

Cuestiones relacionadas