我正在优化一些被频繁使用的存储过程,遇到了一个场景,让我产生了一个问题,但我找不到任何答案:在评估存储过程中的TSQL时,SQL Server是否会短路IF语句?
例如,假设一个存储过程有类似于以下代码:
IF @condition1 = 1
OR EXISTS(SELECT 1 FROM table1 WHERE column1 = @value1)
...
在这种情况下,SQL Server是否会短路计算,使得当前面的子句为true时EXISTS
语句永远不会被执行?
如果它从不或只有有时会这样做,那么我们需要进行一些重写。
if
语句就可以做到。当我之前查看过这个问题时,我发现有一些例子没有短路。你也可以考虑使用 case 语句。 - Martin Smith