猿问

是否评估SQLWHERE子句短路?

是否评估SQLWHERE子句短路?

例如:

SELECT * FROM Table t 
WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key)

如果@key为空计算为真,是@key不为空,@key=t.Key评估?

如果没有,为什么不呢?

如果是的话,有保证吗?它是ANSI SQL的一部分还是特定于数据库的?

如果数据库特定,SQLSERVER?甲骨文?MySQL?

参考资料:短路评估


侃侃无极
浏览 788回答 3
3回答

FFIVE

Ansi SQL草案2003 5WD-01-Framework-2003-09.pdf6.3.3.3规则评估令[...]如果优先级不是由格式或括号决定的,则表达式的有效计算通常从左到右执行。然而,它是执行情况-取决于表达式是否实际从左到右计算,特别是当操作数或运算符可能引发条件时。或者,如果不完全计算表达式的所有部分,就可以确定表达式的结果。

森栏

从以上所述,短路并不是真正可用的。如果你需要,我建议你做一个案例陈述:Where Case when Expr1 then Expr2 else Expr3 end = desiredResultExpr1总是计算,但只有一个Expr2和Expr3将对每一行进行评估。
随时随地看视频慕课网APP
我要回答