2016-05-26 69 views
2

我是Stack Overflow以及存儲過程的新手。我想設置一個過程來包含三個可選參數和三個相關參數。如果用戶不提供這些可選參數,那麼結果集將返回所有可能給定的三個依賴項。SQL Server中存儲過程中的可選參數

在我的腦海裏,它看起來類似於:

@Color1,--optional 
@Color2,--optional  
@Color3,--optional  
@Date,--dependent  
@Item,--dependent  
@Price--dependent  

IF @Color1 IS NULL OR @Color2 IS NULL OR @Color3 IS NULL  
THEN 
    EXEC (SELECT * 
      WHERE 
       Date = @Date AND 
       Item = @Item AND 
       Price = @Price) 
ELSE 
    EXEC (SELECT * 
      WHERE 
       Color1 = @Color1 AND 
       Color2 = @Color2 AND 
       Color3 = @Color3 AND 
       Date = @Date AND 
       Item = @Item AND 
       Price = @Price) 

,但我還在學習。在此先感謝您的幫助

回答

5

首先,你應該提供的參數的默認值,然後比較這些列值或爲空:

create procedure somename 
@p1 int, 
@p2 int = null, 
@p3 int = null 
as 
begin 

    select * from sometable 
    where col1 = @p1 and 
      (col2 = @p2 or @p2 is null) and 
      (col3 = @p3 or @p3 is null) 

end 

然後你就可以調用PROC這樣的:

exec somename @p1 = 1 
exec somename @p1 = 1, @p2 = 2 
exec somename @p1 = 1, @p2 = 2, @p3 = 3 

它會按照您的預期工作。用你的方法,你實際上需要2^NIF檢查,其中N是這樣的參數的數量。想象一下,對於5個參數,您需要執行2^5 = 32IF檢查。通過提供的方法,您可以在一個查詢中進行全部檢查,只需5次檢查

+0

非常感謝你,效果很好 – user6387225

相關問題