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)