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
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'
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
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
.
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
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.
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