NULL参数检查 - WHERE与IF

时间:2013-08-06 13:08:50

标签: sql-server tsql

目前正在审核@return_count为参数的存储过程。下面是传递NULL时我可以设置其值的两种方式的独立示例。

无法确定查询优化器是否会将它们视为相同,或者一种方法是否优于另一种方法。

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

3 个答案:

答案 0 :(得分:7)

您可能需要考虑

SELECT @return_count = ISNULL(@return_count, 10)

答案 1 :(得分:2)

他们返回不同的执行计划,而前者则相当复杂。后者涉及过滤和扫描操作。由于看起来这不需要扩展,我会选择前者。

答案 2 :(得分:1)

您的存储过程似乎可以使用可选参数@return_count。如果是这种情况,那么您可以直接表达为

CREATE PROCEDURE myStoredProc
   @return_count int = 10

AS

BEGIN

.... my logic

END