SQL - montar una SELECT dinámicamente

 
Vista:

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.
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

RE:montar una SELECT dinámicamente

Publicado por Isaías Islas (5072 intervenciones) el 17/10/2003 17:40:13
Vea este ejemplo, le dara una idea de como hacer lo que quiere:

CREATE PROCEDURE InsertSales @PrmOrderID INT, @PrmCustomerID INT,
@PrmOrderDate DATETIME, @PrmDeliveryDate DATETIME
AS
DECLARE @InsertString NVARCHAR(500)
DECLARE @OrderMonth INT

-- Build the INSERT statement.
SET @InsertString = 'INSERT INTO ' +
/* Build the name of the table. */
SUBSTRING( DATENAME(mm, @PrmOrderDate), 1, 3) +
CAST(DATEPART(yy, @PrmOrderDate) AS CHAR(4) ) +
'Sales' +
/* Build a VALUES clause. */
' VALUES (@InsOrderID, @InsCustID, @InsOrdDate,' +
' @InsOrdMonth, @InsDelDate)'

/* Set the value to use for the order month because
functions are not allowed in the sp_executesql parameter
list. */
SET @OrderMonth = DATEPART(mm, @PrmOrderDate)

EXEC sp_executesql @InsertString,
N'@InsOrderID INT, @InsCustID INT, @InsOrdDate DATETIME,
@InsOrdMonth INT, @InsDelDate DATETIME',
@PrmOrderID, @PrmCustomerID, @PrmOrderDate,
@OrderMonth, @PrmDeliveryDate

GO
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