2013-08-06 49 views
2

當前檢查@return_count是參數的存儲過程。下面是如果NULL在傳遞,我可以將其值設置兩種方式一個獨立的例子。NULL參數檢查 - WHERE vs IF

無法弄清楚,如果查詢優化器將對待他們相同,或者如果一個方法是優於其他。

DECLARE @return_count int 
SET @return_count = null 
IF @return_count is null 
    BEGIN 
    SELECT @return_count = 10 
    END 
GO 

DECLARE @return_count int 
SET @return_count = null  
BEGIN 
    SELECT @return_count = 10 
    WHERE @return_count is null 
END 

回答

7

你可能要考慮

SELECT @return_count = ISNULL(@return_count, 10) 
+0

有趣的想法 –

2

他們返回不同的執行計劃,而前者則相當簡單。後者涉及過濾和掃描操作。既然看起來這不需要擴展,我會和前者一起去。

+0

此外,前者更容易閱讀(在我看來)。 –

1

看來,你的存儲過程可以採取一個可選參數@return_count。如果是這種情況,那麼你可以直接表示爲

CREATE PROCEDURE myStoredProc 
    @return_count int = 10 

AS 

BEGIN 

.... my logic 

END