SQL Server是否会短路IF语句?

com*_*ech 13 t-sql sql-server query-optimization short-circuiting

我正在努力优化一些使用频繁的存储过程并遇到一个场景,提出了一个我无法找到任何答案的问题:在存储过程中评估TSQL时,SQL Server是否会使IF语句短路?

例如,假设存储过程的代码类似于:

IF @condition1 = 1
OR EXISTS(SELECT 1 FROM table1 WHERE column1 = @value1)
...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,SQL Server是否会使评估短路,以便EXISTS在前面的子句计算结果为true时从不执行该语句?

如果它从未或有时只是,那么我们就会有一些重写.

Sol*_*zky 7

即使它似乎有效,也不应该依赖它.该CASE语句是唯一的文档状态为短路,但即使是不(或至少不)总是的情况下(嘻嘻).这是一个幸运的SQL Server 2012修复过的错误(请参阅注释).

除了@Martin在这个问题上发表的评论中的评论中的链接兔子洞(肯定是一个有趣的洞)之外,你还应该查看这篇文章:

理解T-SQL表达式短路

以及与该文章有关的讨论论坛.