WHERE 子句中的短路

0 sql-server

如何在 where 子句中短路,例如:

select 1 where 1=2 AND 1/0=0
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,1/0=0不应评估条件,因为第一个条件为假。

von*_*ryz 6

就像 ypercube 评论的那样,Sql Server 不遵守类似于 Java 或 C# 的布尔评估。有很多关于这方面文章,但事实有点难以找到。

根据文档

逻辑运算符的计算顺序可能因查询优化器所做的选择而异。

此行为是由 SQL 是声明性语言这一事实​​引起的。在这种语言中,人们描述了所需的输出,而不是如何构建输出的步骤。如何构建输出取决于 RDBMS。对于习惯于过程和 OOP 方法的程序员来说,这通常是违反直觉的,在这种方法中,人们明确地逐步说明应用程序应该做什么。

如果您的查询在布尔逻辑评估顺序假设中表现不佳,恐怕您必须重新编写这些查询。