Carácter de escape en SQL Server


Quiero usar una cita con carácter de escape. ¿Cómo puedo hacerlo?

He recibido un error en SQL Server

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

Estoy escribiendo una consulta sql en una variable varchar pero he recibido ese error:

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

Quiero usar comillas como caracteres de escape.

Gracias de antemano

Author: marc_s, 2011-02-28

5 answers

Si está concatenando SQL en un VARCHAR para ejecutar (es decir, SQL dinámico), entonces le recomendaría parametrizar el SQL. Esto tiene la ventaja de ayudar a protegerse contra SQL injection plus, lo que significa que no tiene que preocuparse por escapar comillas como esta (lo que hace duplicando las comillas).

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'
 48
Author: AdaTheDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-28 08:52:07

Puede escapar la cita de esta manera:

select 'it''s escaped'

El Resultado será

it's escaped
 72
Author: dugokontov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-28 08:52:09

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í buscará % en cadena completa y así es como se puede usar el identificador ESCAPE en SQL Server.

 26
Author: Aniket A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-25 09:32:16

Necesitas simplemente reemplazar ' con '' dentro de tu cadena

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 instrucción like, debe usar la sintaxis de ESCAPE

También vale la pena mencionar que se está dejando abierto a los 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

 13
Author: Seph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-19 12:22:35

Las comillas de escape en MSSQL se hacen por comillas dobles, por lo que a '' o a "" producirá una ' y " de escape, respectivamente.

 11
Author: Richard Pianka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-28 08:47:59