是否评估使用"OR"的SQL SERVER表达式的所有部分?

CRi*_*ice 5 sql-server expression short-circuiting conditional-statements

鉴于:

WHERE (@Id Is NULL OR @Id = Table.Id)
Run Code Online (Sandbox Code Playgroud)

如果@Id为null:表达式的计算结果为true.第二部分@Id = Table.Id是否仍被考虑?或者,只要第一部分是(在c#中是这种情况),表达式的计算结果就足够了.

这是相关的,因为一些更复杂的OR语句,重要的是要知道是否所有部分都得到评估.


更新:

我发现这个语法是一个很好的选择

WHERE (Table.Id = ISNULL(@Id, Table.Id))
Run Code Online (Sandbox Code Playgroud)

Rem*_*anu 11

有时他们是,有时他们不是.SQL Server不保证布尔运算符短路,不依赖于它的正确性.请参阅此博客文章:布尔运算符短路.

依赖于像这样的@variables的复杂查询可以更好地编写为显式IF语句:

IF (@id IS NULL)
  SELECT ... FROM ... WHERE ...
ELSE
  SELECT ... FROM ... WHERE ...
Run Code Online (Sandbox Code Playgroud)