montar una SELECT dinámicamente
Publicado por Carlos Acero (2 intervenciones) el 17/10/2003 10:11:03
Tengo una duda. Tengo un procedimiento almacenado donde dentro de él hago una SELECT recogiendo los valores en tres variables. En función de esas tres variables tengo que montar la SELECT. Llegado un punto intento aplicar lo siguiente: una serie de IF para terminar de crear la claúsula WHERE. Sé que está mal, porque:
-No sé si con los IF puedo poner un AND/OR para comparar dos valores.
- Lo segundo porque no se termina de construir la SELECT correctamente. Aquí adjunto parte del código para que sea más claro:
DECLARE @intCat VARCHAR(100)
DECLARE @intSubCat VARCHAR(100)
DECLARE @isVisible2 BIT
SELECT @intCat = categorias, @intSubCat = subcategorias, @isVisible2 = visible
FROM intranet_person_biblio
WHERE empleado = @empleado
IF @isVisible2 = TRUE
BEGIN
SET @isVisible = TRUE
SELECT TOP 4 Rtrim(fichero) AS fichero, Rtrim(descripcio) AS descripcion
FROM dossieres
WHERE creada <= GETDATE()
IF (@intCat <> '')
AND categoria IN(@intCat)
IF (@intCat <> '' AND @intSubCat <> '')
OR
IF (@intCat = '' AND @intSubCat <> '')
AND
IF (@intSubCat <> '')
subcategoria IN(@intSubCat);
END
ELSE
BEGIN
SET @isVisible = FALSE
END
Espero que entiendan mi pregunta, un saludo y gracias por su colaboración.
-No sé si con los IF puedo poner un AND/OR para comparar dos valores.
- Lo segundo porque no se termina de construir la SELECT correctamente. Aquí adjunto parte del código para que sea más claro:
DECLARE @intCat VARCHAR(100)
DECLARE @intSubCat VARCHAR(100)
DECLARE @isVisible2 BIT
SELECT @intCat = categorias, @intSubCat = subcategorias, @isVisible2 = visible
FROM intranet_person_biblio
WHERE empleado = @empleado
IF @isVisible2 = TRUE
BEGIN
SET @isVisible = TRUE
SELECT TOP 4 Rtrim(fichero) AS fichero, Rtrim(descripcio) AS descripcion
FROM dossieres
WHERE creada <= GETDATE()
IF (@intCat <> '')
AND categoria IN(@intCat)
IF (@intCat <> '' AND @intSubCat <> '')
OR
IF (@intCat = '' AND @intSubCat <> '')
AND
IF (@intSubCat <> '')
subcategoria IN(@intSubCat);
END
ELSE
BEGIN
SET @isVisible = FALSE
END
Espero que entiendan mi pregunta, un saludo y gracias por su colaboración.
Valora esta pregunta


0