2009-06-30 18 views
5

Estoy tratando de ejecutar una consulta en SQL 2008 haciendo:SQL Escape ''

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ' 'Karl' ' ' 

EXEC(@query) 

El problema es que por alguna razón los apóstrofes alrededor 'Karl' no se les escaparon, es decir, la consulta se ejecuta como ...WHERE [Name] = Karl y falla

Alguien tiene una sugerencia?

Gracias

Karl

+0

Esto es SQL Server 2008, ¿verdad? ¿No MySQL o PostgreSQL o SQLite o cualquiera de las otras variantes de SQL? – MiffTheFox

+3

¿Qué ves si imprimes la cadena @query? – Tetraneutron

Respuesta

0

hacer como esto @query SET = 'SELECT * FROM tabla WHERE [Nombre] = ''' 'Karl' '' ''

+0

esto no funcionará, a menos que Karl esté almacenado en la base de datos con una comilla simple antes y después de su nombre como 'Karl' porque da como resultado que la consulta sea: SELECCIONAR * FROM Table WHERE [Name] = '' Karl '' –

+0

Agregar una cotización más al final haga clic en SET @query = 'SELECCIONAR * FROM Tabla DONDE [Nombre] =' '' 'Karl' '' '' como este – KuldipMCA

-1

Simplemente escapar de los apóstrofes mediante el uso de la barra de escape \ así 'SELECT * FROM tabla WHERE [Nombre] =' \ 'Karl \' ''

creo que sirve

+3

que no funcionará en el sq-sql del servidor sql –

2

esto funciona en mi máquina de SQL Server Management Studio:

@query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''''''Karl''''''' 

EXEC(@query) 
+3

esto no funcionará, a menos que Karl se almacene en la base de datos con dos comillas simples antes y después de su nombre como '' Karl '' porque da como resultado que la consulta sea: SELECCIONAR * FROM Table WHERE [Name] = '' 'Karl '' ' –

3

Hay varias maneras en que puede escapar de los datos de caracteres en SQL Server, incluso algunas personas abogan por el uso de las funciones QUOTENAME().

Si realmente desea desarrollar una sólida comprensión de esta materia, le recomiendo que eche un vistazo a lo que los desarrolladores experimentados de SQL Server consideran una lectura esencial con respecto a los diferentes métodos que puede utilizar para incorporar Dynamic T -SQL en tu codificación.

The Curse and Blessings of Dynamic SQL

+0

El mismo lugar al que apunto a las personas. – dverespey

1

Probar:

DECLARE @query varchar(max) 

SET @query = 'SELECT * FROM Table WHERE [Name] = ''Karl''' 

PRINT 'when in doubt, print the query out: '+ISNULL(@query,'') 
EXEC(@query) 

tener una sola cita aparece, es necesario tener dos comillas simples adyacentes. A escapar de una comilla simple con una comilla simple, por ejemplo:

PRINT ''''  --will print a one single quote 
PRINT '''''' --will print two single quotes 
PRINT 'can''t' --will print can't 
0

Un simple ('') de doble comilla actuará como una única comilla simple cuando dentro de una cadena literal.

¿Ha intentado utilizar una variable?

declare @karl_name varchar(10); 
set @karl_name = '''Karl'''; 

SELECT * FROM Table WHERE [Name] = @karl_name 
0

Esto funciona:

create table #demo([Name] varchar(max)) 
insert into #demo([Name]) values('''Karl''') 
insert into #demo([Name]) values('Karl') 
declare @query varchar(max) 
set @query = 'SELECT * FROM #demo WHERE [Name] = ''''''Karl''''''' 
EXEC(@query) 

Salida:

'Karl' 

Pero si 'Karl' es texto variable, es muy recomendable utilizar algo como esto en su lugar:

declare @query nvarchar(max) 
declare @param varchar(max) 
set @param = N'''Karl''' 
set @query = N'SELECT * FROM #demo WHERE [Name] = @param' 
exec sp_executesql @query, N'@param varchar(max)', @param