为了账号安全,请及时绑定邮箱和手机立即绑定

是否评估SQLWHERE子句短路?

是否评估SQLWHERE子句短路?

侃侃无极 2019-06-24 09:23:47
是否评估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?参考资料:短路评估
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

Ansi SQL草案2003 5WD-01-Framework-2003-09.pdf

6.3.3.3规则评估令

[...]

如果优先级不是由格式或括号决定的,则表达式的有效计算通常从左到右执行。然而,它是执行情况-取决于表达式是否实际从左到右计算,特别是当操作数或运算符可能引发条件时。或者,如果不完全计算表达式的所有部分,就可以确定表达式的结果。


查看完整回答
反对 回复 2019-06-24
?
森栏

TA贡献1810条经验 获得超5个赞

从以上所述,短路并不是真正可用的。

如果你需要,我建议你做一个案例陈述:

Where Case when Expr1 then Expr2 else Expr3 end = desiredResult

Expr1总是计算,但只有一个Expr2Expr3将对每一行进行评估。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 787 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信