Tôi đang tạo một thủ tục lưu sẵn để trả về kết quả tìm kiếm trong đó một số tham số là tùy chọn.Câu lệnh SQL nếu mệnh đề where để tìm kiếm cơ sở dữ liệu
Tôi muốn có "câu lệnh if" trong số của mình, trong đó khoản nhưng không thể làm việc đó. Điều khoản trong đó khoản chỉ nên lọc theo các tham số không null.
Đây là 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
Bất kỳ ý tưởng làm thế nào để làm điều này?
cảm ơn sự giúp đỡ của bạn nhưng giá trị trong cơ sở dữ liệu không phải là rỗng. Tôi muốn bỏ qua phần đó của mệnh đề where nếu null được chuyển cho một trong các tham số – mancmanomyst
Tại sao nó hoạt động: nếu @var là null, thì toàn bộ dòng là đúng, bất kể phần còn lại của dòng (do đó bị bỏ qua và không lọc). Nếu nó không phải là null, so với dòng là false * trừ khi * ColVar = @ var, do đó áp dụng bộ lọc. Tôi đã nhầm lẫn lần đầu tiên tôi đọc phong cách bộ lọc này nhưng sử dụng nó ở khắp mọi nơi ngay bây giờ. –
mancmanomyst.myopenid.com: đó là điều này. Tôi đề nghị làm một bảng chân lý - nó không trực quan lúc đầu. –