`

Sql server 中除零错误

阅读更多

当执行Sql 语句进行查询时,经常会碰到查询除零错误,以下是我总结的几种解决办法:

第一种:使用case语句

 

select 表达式 1/ nullif 表达式 2 ,0 as result  from  table;

这样遇到0时返回的结果为null,如果要返回0可以再做如下的处理:

select isnull(表达式 1/ nullif 表达式 2 ,0 ),0) as result  from  table;

//在oracle数据库中,NVL()相应Isnull(),oracle中还有NVL2,NVLIF等

 

A.nullif()函数用于检查两个表达式,语法:

NULLIF(expression, expression)

如果两个 expression 相等,则返回 NULL,该 NULL 为第一个 expression 的数据类型

 如果两个 expression 不相等,则返回第一个 expression

B. ISNULL(check_expression, replacement_value)
     check_expression 与 replacement_value 数据类型必须一致
     如果 check_expression 为 NULL,则返回 replacement_value
     如果 check_expression 不为 NULL,则返回 check_expression

第三种方法:

则是使用 sqlserver 的选项来禁止出现以零除的错误中断 , 让而让其为 null:

SET ANSI_WARNINGS off

SET ARITHABORT off

SET ARITHIGNORE on(可选)

直接查询就可以了:select 表达式1/ 表达式2 as result from table;不用再对sql做任何处理.

但SET ANSI_WARNINGS 和SET ARITHABORT 的设置是在执行或运行时设置的,而不是在分析时设置的。所有每次查询时都得有

 

SET ANSI_WARNINGS off

SET ARITHABORT off

这两句话,有点麻烦.

我曾经尝试过修改数据库Project的的配置,让所有的查询Project都生效,但经过各种尝试后还是没有解决.

尝试1 : 使用: ALTER DATABASE Project   set ANSI_WARNINGS  OFF
ALTER DATABASE Project    set ARITHABORT OFF 

执行结果虽然是命令已完成,但没有生效.

尝试2: 依照网上说的:使用sp_dboption命令

USE master;
GO
EXEC sp_dboption 'Project', 'ANSI warnings', 'false'; (设为false即为off状态)
go
USE master;
GO
EXEC sp_dboption 'Project', 'arithabort', 'false';

执行结果也是命令已完成,但没有生效.

我甚至把master的这两项值也改为了off状态.

我使用sp_dboption 'Project', 'ANSI warnings',sp_dboption 'Project', 'arithabort',查看设置确实是off状态的,但还是不行

其实这两个属性每个数据库默认都是false的,你在数据库名称上点击右键,选属性,然后选选项就可以看到他们的默认值就是false的,你不信的话可以在系统视图sys.sysdatabases中查看,select name, status2 from sys.sysdatabases

status2的取值说明如下:

 

status2

int

16384 = ANSI null default (ALTER DATABASE)

65536 = concat null yields null (ALTER DATABASE)

131072 = recursive triggers (ALTER DATABASE)

1048576 = default to local cursor (ALTER DATABASE)

8388608 = quoted identifier (ALTER DATABASE)

33554432 = cursor close on commit (ALTER DATABASE)

67108864 = ANSI nulls (ALTER DATABASE)

268435456 = ANSI warnings (ALTER DATABASE)

536870912 = full text enabled(使用 sp_fulltext_database 设置)

 

尝试3、右击数据库引擎,选属性,然后在出现的对话框中点连接选项,在默认连接属性中可以看到,ansi warnings和arithmetic abort这两项默认是没有选中的,也就是默认应该是OFF状态的,我把它选中再重启服务后和没选中效果是一样的,没有起到什么作用,每次查询时还是需要加上

SET ANSI_WARNINGS off

SET ARITHABORT off 这两句话.

希望知道解决这个问题的朋友能留言告诉我一声,先谢谢了!

尝试4、在Microsoft SQL Server Management Studio中,选择"工具" 菜单中的“选项”,在选项卡中“查询执行”中选“高级”和“ANSI”这两项分别把 set arithabort 和 set ansi_warnings 这两项前面的勾去掉,这样的话在SQL Server 查询编辑窗口中所有的查询都会生效,也就是不会出现除零错误了,但当用JDBC连接的查询还是得有

SET ANSI_WARNINGS off

SET ARITHABORT off 这两句话.

 

 

 

 

 

 

 

 

1
0
分享到:
评论

相关推荐

    零基础学VisualBasic+SQLServer 光盘 源文件 第01-04章.rar

    零基础学VisualBasic+SQLServer 光盘 源文件 第一篇 Visual Basic编程篇 第1章 Visual Basic 6.0开发环境概述 第2章 Visual Basic语言基础 第3章 常用内部控件 第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6...

    SQL Server 2000数据库开发从零开始

    内容涉及应用程序需求分析和模型设计,数据库数据处理、函数、存储过程、默认、规则等多种数据库对象操作,SQL Server 2000多种管理工具的使用方法,数据库完整性、一致...错误处理和调试,SQL Server2000安装和配置等

    零基础学VisualBasic+SQLServer 光盘 源文件 第10-20章.rar

    零基础学 VisualBasic SQLServer 光盘 源文件 第一篇 Visual Basic编程篇 第1章 Visual Basic 6.0开发环境概述 第2章 Visual Basic语言基础 第3章 常用内部控件 第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6...

    深度对比Oracle与SQL Server

    比如说一个做SQL Server开収人员在要写Oracle存储过程的时候可能会先去找那些内置的函数然后比较它们之间不同点,她也可能会去比较发量声明以及错误处理的异同。 本系列文章中我将尝试对Microsoft SQL Server和...

    SQL Server 2008 R2安装时提示Build参数大于等于0.reg.rar

    (工具文件)SQL Server 2008 R2安装时提示Build参数大于等于0,不仅仅是理论,你打开解压后可以直接导入使用,解决安装烦恼

    零基础学VisualBasic+SQLServer 光盘 源文件 第05-07章.rar

    零基础学 VisualBasic SQLServer 光盘 源文件 第一篇 Visual Basic编程篇 第1章 Visual Basic 6.0开发环境概述 第2章 Visual Basic语言基础 第3章 常用内部控件 第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6...

    零基础学VisualBasic+SQLServer 光盘 源文件 第08-09章.rar

    零基础学 VisualBasic SQLServer 光盘 源文件 第一篇 Visual Basic编程篇 第1章 Visual Basic 6.0开发环境概述 第2章 Visual Basic语言基础 第3章 常用内部控件 第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6...

    零基础学VisualBasic+SQLServer 光盘 源文件 第22-24章.rar

    零基础学 VisualBasic SQLServer 光盘 源文件 第一篇 Visual Basic编程篇 第1章 Visual Basic 6.0开发环境概述 第2章 Visual Basic语言基础 第3章 常用内部控件 第4章 常用ActiveX控件 第5章 窗体、菜单与对话框 第6...

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方式的用法。 先建立一个表,并添加一些数据来进行演示: 复制代码...

    SQL Server 2000数据库开发从零开始(PDG)

    内容涉及应用程序需求分析和模型设计,数据库数据处理、函数、存储过程、默认、规则等多种数据库对象操作,SQL Server 2000多种管理工具的使用方法,数据库完整性、一致...错误处理和调试,SQL Server2000安装和配置等

    SQL Server误区30日谈 第14天 清除日志后会将相关的LSN填零初始化

    误区 #14.清除日志后会将相关的LSN填零初始化 错误  当日志文件在手动增长... 你可以在我的博客中看到有关日志文件填零初始化的博文:Search Engine Q&A #24: Why can’t the transaction log use instant initializ

    SQL Server误区30日谈 第9天 数据库文件收缩不会影响性能

    错误!  收缩数据库文件唯一不影响性能的情况是文件末尾有剩余空间的情况下,收缩文件指定了TruncateOnly选项。  收缩文件的过程非常影响性能,这个过程需要移动大量数据从而造成大量IO,这个过程会被记录到日志...

    《软件工程师入门 ASP.NET 2.0 网络编程自学手册》随书光盘 Part 2

    主要介绍ASP.NET 2.0从零起步、ASP.NET 2.0开发基础、C#语言基础、ASP.NET内置对象,ASP.NET常用开发服务器控件等内容,第2篇为提高篇(第6章-第13章),主要介绍面向对象的程序设计,使用ADO.NET技术进行数据库开发...

    ASP.NET 2.0网络编程自学手册

    主要介绍ASP.NET 2.0从零起步、ASP.NET 2.0开发基础、C#语言基础、ASP.NET内置对象,ASP.NET常用开发服务器控件等内容,第2篇为提高篇(第6章~第13章),主要介绍面向对象的程序设计,使用ADO.NET技术进行数据库开发...

    简单C#数据库学生管理系统(适合在校学生使用)

    我自己做的C#和SQL server数据库学生管理系统,比较简单,也有很多缺陷,不过运行是没有错误的。开发环境:sql server 2008,vs2008。建议需要的同学使用sql server 2008 及以上版本,vs2005及以上版本。

    Windows 系统错误代码简单分析

    Microsoft Windows 系统错误代码简单分析:  0000 操作已成功完成。  0001 错误的函数。  0002 系统找不到指定的文件。  0003 系统找不到指定的路径。  0004 系统无法打开文件。  0005 拒绝访问。...

    我零0七仓库管理系统.zip

    C# + SQL Server 本系统包括两类用户:学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程、录入成绩、统计成绩 管理系统是一种通过计算机技术...

    基于 Windows 操作系统的零部件销售管理系统。.zip

    C# + SQL Server 本系统包括两类用户:学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程、录入成绩、统计成绩 管理系统是一种通过计算机技术...

    测试培训教材

    安装好SQL Server 2000后注意启动SQLServer服务器 3、安装QC9.0 服务器名称也可以是IP地址 4、启动QC9.0 5、QC9.0安装问题解决 - JBOSS启动不...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境...123 <br>0209 如何使用正则表达式验证密码长度 124 <br>0210 如何使用正则表达式验证非零的正整数 124 <br>0211 如何使用正则表达式验证非零...

Global site tag (gtag.js) - Google Analytics