除了可读性之外,在防止 SQL 中的除以 0 错误时,使用 CASE WHEN 语句与 ISNULL/NULLIF 相比还有什么显着的好处吗?
CASE WHEN (BeginningQuantity + BAdjustedQuantity)=0 THEN 0
ELSE EndingQuantity/(BeginningQuantity + BAdjustedQuantity) END
vs
ISNULL((EndingQuantity)/NULLIF(BeginningQuantity + BAdjustedQuantity,0),0)
请记住,NULL 与 0 不同。因此问题中的两个代码片段对于相同的输入可能会返回不同的结果。
例如,如果 BeginningQuantity 为 NULL,则第一个表达式的计算结果为 NULL:
CASE WHEN (NULL + ?)=0 THEN 0 ELSE ?/(NULL + ?) END
现在 (NULL + ?) 等于 NULL,而 NULL=0 为 false,因此计算 ELSE 子句,给出 ?/(NULL+?),结果为 NULL。然而,第二个表达式变为:
ISNULL((?)/NULLIF(NULL + ?,0),0)
这里是NULL+?变为 NULL,并且由于 NULL 不等于 0,因此 NULLIF 返回第一个表达式,该表达式为 NULL。外部 ISNULL 捕捉到这一点并返回 0。
所以,下定决心:你要防止被零除还是被 NULL 除吗? ;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)