日期:2014-05-19  浏览次数:20511 次

如何屏蔽遇到被零除错误!
如何屏蔽遇到被零除错误!
由于在程序是应用到动态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&reg; SQL Server&#8482; 将在执行查询后返回 NULL 和一条警告信息。


如果 SET ARITHABORT 为 OFF 并且在对表达式的求值过程中 INSERT、DELETE 或 UPDATE 语句遇到算术错误(溢出、被零除或域错误),SQL Server 将插入或更新 NULL 值。如果目标列不可为空,则插入或更新操作失败并且用户收到错误信息。