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 varchar
variable pero he recibido ese error:
Comillas sin cerrar después de la cadena de caracteres.
Quiero usar comillas como carácter de escape.
sql-server
escaping
char
e al cuadrado
fuente
fuente
Respuestas:
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á
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'
fuente
Puede escapar de una cita como esta:
select 'it''s escaped'
el resultado será
fuente
Puede definir su carácter de escape, pero solo puede usarlo con una
LIKE
cláusula.Ejemplo:
SELECT columns FROM table WHERE column LIKE '%\%%' ESCAPE '\'
Aquí buscará
%
en una cadena completa y así es como se puede usar elESCAPE
identificador enSQL Server
.fuente
Solo necesitas reemplazar
'
con el''
interior de tu cuerdaSELECT colA, colB, colC FROM tableD WHERE colA = 'John''s Mobile'
También puede usar
REPLACE(@name, '''', '''''')
si genera el SQL dinámicamenteSi 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
fuente
select '
devuelve el errorUnclosed 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.El escape de las comillas en MSSQL se realiza mediante comillas dobles, por lo que a
''
o a""
producirán un escape'
y"
, respectivamente.fuente
Puede usar el
**\**
carácter antes del valor del que desea escapar, por ejemploinsert into msglog(recipient) values('Mr. O\'riely')
select * from msglog where recipient = 'Mr. O\'riely'
fuente
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
fuente
WHERE username LIKE '%[_]d'; -- @Lasse solution WHERE username LIKE '%$_d' ESCAPE '$'; WHERE username LIKE '%^_d' ESCAPE '^';
DE: SQL Server Escape un subrayado
fuente
Para que el código sea fácil de leer, puede usar corchetes
[]
para citar la cadena que lo contiene'
o viceversa.fuente