【问题标题】:SQL where if statementSQL where if 语句
【发布时间】:2014-08-21 21:40:49
【问题描述】:

有类似这样的存储过程。

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 选择所有状态,如果'' 选择空状态,如果某些状态 - 选择某些状态。并且需要为 Inventory(with/without) 创建 where 条件

【问题讨论】:

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


【解决方案1】:

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

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

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

如果您为库存添加条件,请确保将状态检查放在括号中。 AND 在 OR 之前求值,因此最好对条件进行逻辑分组,以免它们被乱序求值。

【讨论】:

  • /*ALL*//* match case*/ 括号中的代码是什么
  • @AleksP none - 这些是内联 cmets。
【解决方案2】:
WHERE (@status IS NULL  OR (@status  =STATUS))

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    相关资源
    最近更新 更多