2011-03-04 13 views
5

Por qué el siguiente código SQL no significa nada tráemelosusando dinámica en cláusula en MSSQL

DECLARE @Status AS VARCHAR(400) 
SET @status = '''Closed'',''OPEN''' 
select * from MYTABLE where status in(@status) 

Mientras que select * from MYTABLE where status in('Closed','Open') me captan filas

+2

comprobé, pero todos ellos estaban relacionados con LINQ. Perdón si me perdí alguna, ¿podría indicarme una publicación similar? – rsapru

+0

Compruebe que este enlace podría ayudar. Si, tienes razón. Parece difícil encontrar uno, pero estoy seguro de que hay muchos. De todos modos tiene un enlace difícil - http://stackoverflow.com/questions/2194120/formatting-a-string-for-a-sql-in-clause –

Respuesta

4

se puede hacer si usted quiere hacer algo de SQL dinámico, pero creo que no es muy competitiva ..

DECLARE @Status nVARCHAR(400), 
      @SQL nvarchar(500) 

SET @status = '''Closed'''+','+'''OPEN''' 
set @SQL = ' 
select * from [MYTABLE] where status in('[email protected] +')' 

exec sp_executesql @SQL 
GO 
+0

Esto funcionó para mí ... Dynamic SQL está bien para mí. – rsapru

+1

Feliz de ayudar pero ocúpese de la inyección SQL con SQL dinámico si es el código para la aplicación web. – bAN

+0

encontró esta respuesta en una búsqueda previa a la pregunta. ¡Gracias! – nageeb

4

Sus primeros cheques pregunta si existe el valor 'Closed','OPEN' en la base de datos. Los valores no están expandidos.

Si usa SQL Server 2008 o posterior, puede usar Table Valued Parameters para lograr lo mismo.

+0

Gracias por la explicación, nunca lo sabía. Me ayudó a entender el problema – rsapru

Cuestiones relacionadas