遇到了 “遇到以零作除数错误” 的问题
来源:互联网 发布:鲜花可以淘宝上买吗 编辑:程序博客网 时间:2024/04/28 00:40
开发的时候,写了个很简单的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.TmpA111 12 ID Total CountNr13 ----------- --------------------------------------- -----------14 1 1.00 115 2 1.00 116 3 0.00 017 4 1.00 118 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.TmpA1SELECT 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;GOSELECT 1 / 0SELECT Total/CountNr FROM dbo.TmpA1-----------NULL(1 行受影响)---------------------------------------1.00000000000001.0000000000000NULL1.00000000000001.0000000000000
可以说~这样不是更加方便吗?连Case when 都不用写了!!最多处理一下Isnull,0 就好了嘛~但是!!!有几种情况是不可以的
1 当我们有使用链接服务器的时候!比方说这样纸,我随便调用了我的另外一台服务器,因为 ANSI_WARNINGS 的选项保持一致的,so 就报错啦!
SET ANSI_WARNINGS OFF;SET ARITHIGNORE ON;SET ARITHABORT OFF;GOSELECT * 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;GODECLARE @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解析的作用域就可以了。这个倒是好解决
嗯~这次也说道这里~请各位清拍
0 0
- 遇到了 “遇到以零作除数错误” 的问题
- SQL 遇到以零作除数错误的处理
- SQL 遇到以零作除数错误的处理
- 遇到sql server 遇到以零作除数错误
- sql server 遇到以零作除数错误。
- sqlserver遇到以0作为除数 报错
- 新人学习opengl,记录下遇到的问题以作记录
- 在sql中遇到除数为0的错误时候的解决办法
- 遇到了FTP的问题 425或501错误
- 错误查找遇到的问题
- 遇到了问题了
- mysql遇到了1067错误的解决
- 用php作wap开发时遇到的问题
- 用php作wap开发时遇到的问题
- php作wap开发时遇到的问题
- jsp作权限验证遇到的两个问题
- php作wap开发时遇到的问题
- cocos2dx下应用RapidXml作ConfigService遇到的问题
- 说完Pivot 今天说下Unpivot 的处理方式
- 今天说一下DML触发器的顺序
- 又来说一下顺序~关于唯一索引和唯一约束的顺序
- 基础篇之 Create Type
- 我的mave学习(二)
- 遇到了 “遇到以零作除数错误” 的问题
- 记一次使用openrowset 的坑
- TCO 2016 R1C
- 尝试一下sql server2016里面的json功能
- 继续说一下2016里面的json功能(1)
- 【HUSTOJ】1045: 字符图形1-星号矩形
- 继续说一下openjson 以及 json path 的使用 (2)
- 还来一篇说下json_value 以及 json_query 的应用 (3)
- sql server 里面的 dynamic Data Masking