SQL Server - Where --- equivalente hacer un and

 
Vista:
Imágen de perfil de Santos Pairazamán

Where --- equivalente hacer un and

Publicado por Santos Pairazamán (2 intervenciones) el 07/04/2011 19:53:42
Quiero hacer un procedimiento que reciba una variable con una serie de valores seperados por coma y poder ejecutar una consulta que haga una condición AND por cada dato qeu se encuentra en la cadena separados por comas.

En este caso me devuelve pero hace la condición con OR, es decir codigo=1 or codigo=2 or codigo=3

declare @cadena varchar(1000)
select @cadena = '1,2,3'
select * from tabla where codigo in (@cadena)

Lo que yo quisiera es que haga esto:
codigo=1 and codigo=2 and codigo=3

Espero sus sugerencias.

Saludos,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Where --- equivalente hacer un and

Publicado por Isaias (4558 intervenciones) el 08/04/2011 00:41:56
Debes "descomponer" tu cadena con SUBSTRING y hacer un Query Dinamico
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Where --- equivalente hacer un and

Publicado por Juan Manuel Cruz (59 intervenciones) el 08/04/2011 13:02:30
Podrías agregar una coma delante y otra detrás a @cadena de modo que quede así:

set @cadena=',1,2,3,'

Y luego

select * from tabla where CHARINDEX( ','+ltrim(rtrim(codigo))+',' , @cadena)>0

No es elegante, pero funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Where --- equivalente hacer un and

Publicado por Juan Manuel Cruz (59 intervenciones) el 08/04/2011 13:11:45
Tambien podrias intentar armar una cadena con toda la consulta, y ejecutarla con EXEC

digamos que @cadena es '12595,52157,51921'

entonces tu procedimiento almacenado hace esto:

declare @aaa varchar(max)
set @aaa= 'select * from articulo where cod_art in (' + @cadena + ')'
execute (@aaa)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar