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.

Preguntas similare

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.
Respuesta Responder a este mensaje
#2 Carlos M. Calvelo
18/07/2008 - 11:55 | Informe spam
Hola Rafael,

On 18 jul, 11:49, Rafael Cano wrote:
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;




O así:

WHERE Activo=@vActivo OR @vActivo = 2

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 Antonio Ortiz
19/07/2008 - 00:53 | Informe spam
Supongo que si es un campo bit solo podras almancenar 2 valores: 0 y 1



Antonio Ortiz
asesor en sistemas
ant(a)aortiz.net
www.aortiz.net
www.progvisual.com



"Pedro J. Reguera" escribió en el mensaje
news:
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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida