0 sql-server
如何在 where 子句中短路,例如:
select 1 where 1=2 AND 1/0=0
在上面的示例中,1/0=0不应评估条件,因为第一个条件为假。
1/0=0
von*_*ryz 6
就像 ypercube 评论的那样,Sql Server 不遵守类似于 Java 或 C# 的布尔评估。有很多关于这方面的文章,但事实有点难以找到。
根据文档:
逻辑运算符的计算顺序可能因查询优化器所做的选择而异。
此行为是由 SQL 是声明性语言这一事实引起的。在这种语言中,人们描述了所需的输出,而不是如何构建输出的步骤。如何构建输出取决于 RDBMS。对于习惯于过程和 OOP 方法的程序员来说,这通常是违反直觉的,在这种方法中,人们明确地逐步说明应用程序应该做什么。
如果您的查询在布尔逻辑评估顺序假设中表现不佳,恐怕您必须重新编写这些查询。
归档时间:
12 年,5 月 前
查看次数:
1784 次
最近记录: