道歉,如果这不适合,但真的这是'为什么',而不是'如何'。不知道这是否合适,但不知道一个更好的地方要问,我想不出如何说出谷歌来获得我正在寻找的东西。IF条款的SQL评估
IF 'hell' = 'freezing over'
BEGIN
SELECT log(0)
END
看看那句话。没有哪个世界中的IF条款是真实的。如果我试图运行它,我希望SQL跳过IF子句并移动到最后。相反,我得到:
An invalid floating point operation occurred.
这是奇怪的。所以我想这就是SQL这样做的方式。除...
IF 'hell' = 'freezing over'
BEGIN
SELECT 1/0
END
这里没有错误。 IF子句中的语句仍然会产生错误。任何人都可以解释为什么这不会发生?
这是在调试大量SQL计算时使用EXP(SUM(LOG()))在if子句中累积数据的过程。我可以改变代码以阻止这种情况再次发生,但为什么它在未满足的IF子句中评估某些内容。
干杯。
编辑:额外的娱乐。试着抓? Pffft
IF 1=2
BEGIN
BEGIN TRY
SELECT SQRT(-1)
END TRY
BEGIN CATCH
END CATCH
END
非数学:
IF 1=2
BEGIN
SELECT SUBSTRING('hello',-1,-1)
END
ANSI警告没有区别,但这是我认为我需要的链接,所以非常感谢:) –
欢迎您。通过ANSI_WARNINGS我的意思是,如果在任何时候发布“set ansi_warnings off”,那么您将看不到除零错误。由于编译器无法预先知道ANSI_WARNINGS标志在编译查询运行时的状态,因此它必须忽略在编译时引发零除异常的任何折叠表达式,因为它无法预测所需的行为。 (如果ansi_warnings保证始终关闭1/0将折叠为NULL) –