Estoy creando un procedimiento almacenado para devolver resultados de búsqueda donde algunos de los parámetros son opcionales.Instrucción SQL if en la cláusula where para buscar bases de datos
Quiero una "instrucción if" en mi donde cláusula, pero no puede hacerlo funcionar. El donde cláusula debería filtrar solo por los parámetros no nulos.
Aquí está el sp
ALTER PROCEDURE spVillaGet
-- Add the parameters for the stored procedure here
@accomodationFK int = null,
@regionFK int = null,
@arrivalDate datetime,
@numberOfNights int,
@sleeps int = null,
@priceFloor money = null,
@priceCeil money = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
select tblVillas.*, tblWeeklyPrices.price from tblVillas
INNER JOIN tblWeeklyPrices on tblVillas.villaId = tblWeeklyPrices.villaFK
where
If @accomodationFK <> null then
accomodationTypeFK = @accomodationFK
@regionFK <> null Then
And regionFK = @regionFK
IF @sleeps <> null Then
And sleeps = @sleeps
IF @priceFloor <> null Then
And price >= @priceFloor And price <= @priceCeil
END
¿Alguna idea de cómo hacer esto?
gracias por su ayuda, pero el valor en la base de datos no es nulo. Quiero omitir esa parte de la cláusula where si se pasa null para uno de los parámetros – mancmanomyst
Por qué funciona esto: si @var es nulo, entonces toda la línea es verdadera, independientemente del resto de la línea (por lo tanto ignorada y sin filtrar)) Si no es nulo, entonces la línea es falsa * a menos que * ColVar = @ var, aplicando así el filtro. Estaba confundido la primera vez que leí este estilo de filtro, pero ahora lo uso en todos lados. –
mancmanomyst.myopenid.com: eso es lo que hace. Sugiero hacer una tabla de verdad: al principio no es intuitiva. –