开发的时候,写了个很简单的Sql ,大概就是 总数除以数量 得出的平均值。看起来很平常是不是!简单来说就是 Total / Count 嘛!最多转个2位小数用Convert就完事了对不对。

但是呢,有些数据的Count值本身是就是0的。然后就会报遇到以0作为除数的错误的问题了啊~

然后演示几种可能出现的情况,先初始化一个测试样例,

 1 CREATE TABLE TmpA1 (ID INT IDENTITY(1,1),Total NUMERIC(8,2),CountNr INT)
 2
 3 INSERT INTO dbo.TmpA1
 4         ( Total, CountNr )
 5 VALUES  ( 1,1 ),
 6         ( 1,1 ),
 7         ( 0,0 ),
 8         ( 1,1 ),
 9         ( 1,1 )
10 SELECT * FROM dbo.TmpA1
11
12 ID          Total                                   CountNr
13 ----------- --------------------------------------- -----------
14 1           1.00                                    1
15 2           1.00                                    1
16 3           0.00                                    0
17 4           1.00                                    1
18 5           1.00                                    1

创建测试表

然后在一般默认的情况下如果使用这个语句,立马就会粗线以下的错误。因为ID = 3 的数据里面除数为0嘛对不对

SELECT Total/CountNr FROM dbo.TmpA1
消息 8134,级别 16,状态 1,第 10 行
遇到以零作除数错误。

但是如果是在查询的时候没有遇到这样的数据,那当然就不会报错罗 ~,比方说

SELECT Total/CountNr FROM dbo.TmpA1 WHERE ID <> 3

就正常了~

当然我们是不太可能在查询的时候总是能跳过那些除数为0的数据的。有些也是要查出来。这样的话。修改的方法还是多种,最常见的是这种直接处理

SELECT Total/CASE CountNr WHEN 0 THEN 1 ELSE CountNr END FROM dbo.TmpA1
SELECT CASE CountNr WHEN 0 THEN 0 ELSE Total/CountNr END FROM dbo.TmpA1

当然还是有另外的处理方法,就是屏蔽了“遇到以零作除数错误” 的错误信息(好拗口),这样的话,遇到0是除数的情况,就是赋值为Null

SET ANSI_WARNINGS OFF;
SET ARITHIGNORE ON;
SET ARITHABORT OFF;
GO
SELECT 1 / 0
SELECT Total/CountNr FROM dbo.TmpA1
-----------
NULL
(1 行受影响)
---------------------------------------
1.0000000000000
1.0000000000000
NULL
1.0000000000000
1.0000000000000

可以说~这样不是更加方便吗?连Case when 都不用写了!!最多处理一下Isnull,0 就好了嘛~但是!!!有几种情况是不可以的

1 当我们有使用链接服务器的时候!比方说这样纸,我随便调用了我的另外一台服务器,因为 ANSI_WARNINGS 的选项保持一致的,so 就报错啦!

SET ANSI_WARNINGS OFF;
SET ARITHIGNORE ON;
SET ARITHABORT OFF;
GO
SELECT *
FROM [GINPC\GIN_Test].TestDB.dbo.TestTR1
消息 7405,级别 16,状态 1,第 33 行
异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保查询语义一致。请启用这些选项,然后重新发出查询。

2 当使用xml的时候也会跪,比方说

SET ANSI_WARNINGS OFF;
SET ARITHIGNORE ON;
SET ARITHABORT OFF;
GO
DECLARE @Xml XML='
<R><I>3</I></R>
'
SELECT Total/CountNr
FROM dbo.TmpA1 a
WHERE @Xml.exist('R/I[text()=sql:column("a.ID")]') = 1

当涉及到xml作为参数的时候,就会提示到这个ANSI_WARNING 这个设置不正确。这个原理我就不是太懂,还希望各位指教。

但是解决方法也是比较简单的。就是把查询脱离xml解析的作用域就可以了。这个倒是好解决

嗯~这次也说道这里~请各位清拍

遇到了 “遇到以零作除数错误” 的问题相关推荐

  1. sqlserver 遇到以零作除数错误的处理 不报错的解决方法

    sqlserver 遇到以零作除数错误的处理 不报错的解决方法 参考文章: (1)sqlserver 遇到以零作除数错误的处理 不报错的解决方法 (2)https://www.cnblogs.com/ ...

  2. sqlserver 遇到以零作除数错误的处理 不报错的解决方法

    原文:sqlserver 遇到以零作除数错误的处理 不报错的解决方法 使用sqlserver 的选项来禁止出现以零除的错误中断,让而让其为null set ansi_warnings off SET  ...

  3. SqlServer遇到以零作除数错误

    1.在查询语句开头加上这段 set ansi_warnings off SET ARITHABORT off SET ARITHIGNORE on 2.转换一下除数的格式 NULLIF(字段,0)

  4. sql server中除数为零的处理技巧

    在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...

  5. sql2008R2 错误 3000 - 3999

    错误 严重性 是否记录事件 说明(消息正文) 3002 16 否 不能对数据库快照执行 BACKUP 或 RESTORE. 3003 10 否 此 BACKUP WITH DIFFERENTIAL 将 ...

  6. sql server利用不同语种语言显示报错错误消息的方法示例

    这篇文章主要给大家介绍了关于sql server利用不同语种语言显示报错错误消息的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用sql server具有一定的参考学习价值,需要的朋友们下 ...

  7. 异常处理机制(Begin try Begin Catch)

    begin try--SQL end trybegin catch --sql (处理出错动作)end catch 我们将可能会出错的sql 写在begin try...end try 之间,若出错, ...

  8. Botler.ai为美国和加拿大推出性骚扰检测机器人

    上图:从左至右:联合创始人Amir Moravej和Ritika Dutt,顾问Yoshua Bengio图片来源:Eva Blue 总部位于蒙特利尔的Botler.ai今天宣布,它将推出一项新的服务 ...

  9. sqlserver数据库错误码

    错误 严重性 是否记录事件 说明 -2 超时时间已到. 超时时间在操作完成或服务器没有响应之前已过. (Microsoft SQL Server,错误: -2). -1 在建立与服务器的连接时出错. ...

最新文章

  1. 使用SVD求取矩阵的伪逆
  2. tomcat无法正常关闭问题分析及解决
  3. tomcat服务器访问网址组成
  4. Python将序列分解为单独的变量
  5. javascript --- 从数组中,找出比给定元素大一丁点的元素
  6. mysql多表 性能_Mysql 多表联合查询效率分析及优化
  7. JS学习笔记3-JavaScript 语句
  8. 从零开始学前端:复习课程 --- 今天你学习了吗?(CSS:Day11)
  9. Codeforces Round #879 (Div. 2) C. Short Program
  10. python入门经典代码-【python】编程语言入门经典100例--11
  11. 中间弹框_Flutter AlertDialog弹框的基本使用概述
  12. java计算机毕业设计ssm宠物店管理系统element vue前后端分离
  13. 沸腾新十年 | 中国语音产业江湖和科大讯飞的前半生...
  14. 矩阵分析与应用-1.2-向量空间_内积空间与线性映射
  15. 微信小程序导入Bmob后端云的步骤
  16. 万豪国际集团在华运营酒店超过400家
  17. 孪生素数猜想,不值一提
  18. 如何获取维普万方等的免费账号--在校外下载维普万方等全文
  19. 项目笔记:4.引入CDN内容分发网络,实现网站静态元素加速
  20. 博客推广外链接-SEO搜索引擎优化

热门文章

  1. 3.3 伴随矩阵法求逆矩阵
  2. c语言海明校验码编码,海明校验码的编码规则有哪些?
  3. Github连接不上问题
  4. PaddleOCR 识别数据制作
  5. Error:A JNI error has occurred, please check your installation and try again的解决方法
  6. 通用验证方法学(Universal Verification Methodology, UVM):简介及内容导航
  7. zoom 用法 flex zoom
  8. 如何解决谷歌Chrome浏览器空白页的问题
  9. codeforces869EThe Untended Antiquity(二维树状数组)
  10. pageBean的介绍