Un TSQL con operadores lógicos.

18/07/2008 - 10:53 por Pedro J. Reguera | Informe spam
Hola:
Me enfrento a la necesidad de realizar una consulta operando con operadores
lógicos.. pero ciertamente no doy con la solución. Os expongo el
problemilla.

Sea una tabla por ej. con tres campos.
ID - Int.
Nombre- varchar(30)
Activo - bit

Pues bien, tengo que llamar a un procedimiento al que se le pasa el
parámetro
@vActivo que puede tener tres valores posibles: 0, 1, 2
En el caso de que sea 0 deben aparecer todos los que tengan Activo=0, en el
caso de 1 deben aparecer todos los que Activo=1 y en el caso de 2 deben
aparecer TODOS, estén activos o no.

Por favor, NO indicar como solución
IF @vActivo=2 then
SELECT * FROM tabla
ELSE
SELECT * FROM TABLA Where Activo=@vActivo

Ya que la consulta real tiene muchos más campos y condicionantes, lo que
busco es no tener que usar el IF ni TAMPOCO generar una cadena dinámica para
luego ejecutarla
Es decir.. tampoco sería válida la solución.
DECLARE @vstrSQL as varchar(200)
SET @vstrSQL='SELECT * FROM TABLA '
If @vActivo!=2
SET @vstrSQL = ¡ @vstrSQL + ' WHERE Activo= ' + cast(@vActivo as
varchar)

EXEC(@vstrSQL)


Gracias a todos y un saludo.
PedroJ.
 

Leer las respuestas

#1 Rafael Cano
18/07/2008 - 11:49 | Informe spam
Esto te funciona siempre y cuando Activo no admita nulos.
SELECT * FROM Tabla WHERE Activo = CASE @vActivo
WHEN 0 THEN 0
WHEN 1 THEN 1
WHEN 2 THEN Activo END;



Salu2 Rafael Cano
rcanop(arroba)yahoo.es
Jaén - España
Villamartín - Cádiz - España

Pedro J. Reguera escribió:
Hola:
Me enfrento a la necesidad de realizar una consulta operando con
operadores lógicos.. pero ciertamente no doy con la solución. Os expongo
el problemilla.

Sea una tabla por ej. con tres campos.
ID - Int.
Nombre- varchar(30)
Activo - bit

Pues bien, tengo que llamar a un procedimiento al que se le pasa el
parámetro
@vActivo que puede tener tres valores posibles: 0, 1, 2
En el caso de que sea 0 deben aparecer todos los que tengan Activo=0, en
el caso de 1 deben aparecer todos los que Activo=1 y en el caso de 2
deben aparecer TODOS, estén activos o no.

Por favor, NO indicar como solución
IF @vActivo=2 then
SELECT * FROM tabla
ELSE
SELECT * FROM TABLA Where Activo=@vActivo

Ya que la consulta real tiene muchos más campos y condicionantes, lo que
busco es no tener que usar el IF ni TAMPOCO generar una cadena dinámica
para luego ejecutarla
Es decir.. tampoco sería válida la solución.
DECLARE @vstrSQL as varchar(200)
SET @vstrSQL='SELECT * FROM TABLA '
If @vActivo!=2
SET @vstrSQL = ¡ @vstrSQL + ' WHERE Activo= ' + cast(@vActivo as
varchar)

EXEC(@vstrSQL)


Gracias a todos y un saludo.
PedroJ.

Preguntas similares