如何屏蔽遇到被零除错误!
如何屏蔽遇到被零除错误!
由于在程序是应用到动态sql求表达式的值(如exec sp_executesql @sql,N '@va numeric(18,6) output ',@va output),
而表达式中有除法运算,可能有被零除的情形,程序会退出,如何此屏蔽错误?
将0写入结果继续运行?
------解决方案--------------------在之前判断case when 字段=0 then 0 else...
------解决方案--------------------好像不行
------解决方案--------------------那分成2次查呢先where <> 0
再union all 一次呵呵.
------解决方案--------------------加个case when ... else ... end判断
------解决方案--------------------支持楼上的!
------解决方案--------------------是被除数为0
在被除数定义一下(case when 值=0 then 1 else 值 end)
------解决方案--------------------在查询的最前面,加上
set ansy_warnings off
这样被0除时不会中断查询报错,而是为被0除的字段返回null
------解决方案--------------------sorry,是
SET ansi_warnings OFF
------解决方案--------------------在除法运算的地方加上判断:case when 除数> 0 then 被除数/除数 else 0 end
------解决方案--------------------加上一句 SET ARITHABORT OFF
SET ARITHABORT { ON | OFF }
注释
如果 SET ARITHABORT 为 ON,则这些错误情况将导致查询或批处理终止。如果在事务内发生错误,则回滚事务。如果 SET ARITHABORT 为 OFF 并且发生了这些错误之一,则显示一条警告消息,并给算术运算的结果赋以空值。
说明 如果 SET ARITHABORT 和 SET ARITHIGNORE 都没有设置,则 Microsoft® SQL Server™ 将在执行查询后返回 NULL 和一条警告信息。
如果 SET ARITHABORT 为 OFF 并且在对表达式的求值过程中 INSERT、DELETE 或 UPDATE 语句遇到算术错误(溢出、被零除或域错误),SQL Server 将插入或更新 NULL 值。如果目标列不可为空,则插入或更新操作失败并且用户收到错误信息。