SQL where if语句

时间:2014-08-21 21:40:50

标签: sql-server tsql stored-procedures if-statement optional-parameters

有这样的存储过程。

CREATE PROCEDURE test
  @ID
  @inventory bit = 0
  @status nvarchar(2) = null
AS
BEGIN
 SELECT 
   ID
   INVENTORY = (SELECT SUM(Inventory) FROM Option WHERE /*Inventory if 0 with if 1 without*/)
   STATUS
 WHERE 
   --TODO Status if
END

如何在status null, '', 'preordered'时创建if语句,例如:null选择所有状态,如果''选择空状态,如果某些状态 - 选择一些状态。并且需要为库存创建条件(有/没有)

2 个答案:

答案 0 :(得分:2)

  

如果null选择所有状态,如果''选择空状态,如果某些状态 - 选择一些状态

只需添加一个空状态检查,并且在这种情况下不包含任何其他条件:

WHERE (@status IS NULL) /* ALL */ 
   OR
    (@status = STATUS) /* match status */

如果您为库存添加条件,请确保将状态检查括在括号中。 AND在OR之前得到评估,因此最好对条件进行逻辑分组,以便它们不会被无序评估。

答案 1 :(得分:2)

WHERE (@status IS NULL  OR (@status  =STATUS))

如果@Status为空,则不排除任何记录