【发布时间】:2017-02-28 05:01:59
【问题描述】:
查看其他问题here on SO 和google 似乎表明MS Sql Server 不保证将WHERE 子句中的表达式短路。
这是否意味着像这样的 WHERE 表达式不能被信任工作...?
... WHERE (@include_voided = 1 OR mytable.void = 0) AND ...
我经常在我的存储过程中使用这种表达式。由于另一个原因研究了短路,我现在想知道是否应该将其替换为 ...
... WHERE mytable.void = case when @include_voided=1 then mytable.void else 0 END
...因为所有文章似乎都表明 CASE 语句是唯一保证短路的语句。
我希望第一个表达式很好,因为它更易读,更容易输入。
【问题讨论】:
-
顺便说一句,你会在
@include_voided = NULL上得到不同的结果。此外,您无法使这些搜索条件成为可搜索条件(即此处无法进行索引搜索),因此请使用更方便编写的方式。
标签: sql sql-server