2

当前正在查看作为参数的存储过程@return_count。下面是一个独立的例子,如果传入 a ,我可以设置它的值的两种方法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
4

3 回答 3

7

您可能要考虑

SELECT @return_count = ISNULL(@return_count, 10)
于 2013-08-06T14:34:49.970 回答
2

它们返回不同的执行计划,而前者的复杂性要小得多。后者涉及过滤和扫描操作。由于这似乎不需要扩展,我会选择前者。

于 2013-08-06T13:45:30.723 回答
1

看来您的存储过程可以采用可选参数@return_count。如果是这种情况,那么您可以直接将其表示为

CREATE PROCEDURE myStoredProc
   @return_count int = 10

AS

BEGIN

.... my logic

END
于 2013-08-07T14:40:29.183 回答