首页 > 数据库 >MSSQL遇到以零作除数错误的处理方法

MSSQL遇到以零作除数错误的处理方法

时间:2024-03-07 21:56:14浏览次数:27  
标签:set int declare 以零作 sql null MSSQL 除数

https://www.cnblogs.com/huolarry/p/5766057.html

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

做个会报这个错误的示例,如以下sql代码:

declare @a int;
declare @b int;
set @a=10
set @b=0
select @a/@b


运行就会抛出遇到以零作除数错误的错误

本章主要讲解一下如何在sql server处理除数为零的两种方法:
一,利用case语句。
我们改写上面的sql,当@b=0的时候,我们就返回1.改写如下:

1 2 3 4 5 declare @a int; declare @b int; set @a=10 set @b=0 select case @b when then else @a/@b end

这样写当然是正确的,但显的麻烦,下面我们看一下第二处理方法。


二,利用nullif函数
nullif函数有两个参数,定义如下:

NULLIF( expression , expression )

其作用就是:如果两个指定的表达式相等,就返回null值。

看一示例:

select nullif(0,0)


运行结果:null

我们知道,null与任何数进行任何运算,其结果都等于null,利用这点,我们可以将上面的sql改写为:

1 declare @a int;
2 declare @b int;
3 set @a=10
4 set @b=0
5 select @a/nullif(@b,0)

 

其运行结果自然为null了。

再利用isnull函数,我们就可以实现当@b=0的时候,结果返回1的需求了。最终的sql改写如下:

declare @a int;
declare @b int;
set @a=10
set @b=0
select isnull(@a/nullif(@b,0),1)

 

OK,两种方法介绍完毕,相对于方法一,我更推荐大家使用方法二,因为方法二的代码更简省。

(如果有朋友对isnull函数不了解的话,这里可以解释一下。
isnull的定义如下:
isnull(参数1,参数2)
其作用就是,当参数1等于null时,就返回参数2的值。)

标签:set,int,declare,以零作,sql,null,MSSQL,除数
From: https://www.cnblogs.com/csjoz/p/18059857

相关文章

  • PostgerSql 相较于MSSQL 要注意的地方
    十年河东,十年河西,莫欺少年穷学无止境,精益求精1、大小写敏感传统的SQLSERVER数据库默认大小写不敏感,但PgSql是大小写敏感的,如下:2、varChar和Text其实没你想的那么简单MSSQL中用得最多的的文本类型是NVARCHAR,这是一个带长度限制的文本类型,对应地,PG中有VARCHAR,这样用没问题,......
  • mssql排序order by42000报错解决
    原文链接:https://blog.csdn.net/wang1qqqq/article/details/122961882在mssql查询中,如果子查询中使用orderby,会出现报错:[42000][Microsoft][ODBCDriver17forSQLServer][SQLServer]除非另外还指定了TOP、OFFSET或FORXML,否则,ORDERBY子句在视图、内联函数、派生表、子......
  • 为什么django3+版本不能用sql_server.pyodbc只能用mssql
    之前使用的是django2.2.2,后来换到django3.2后发现在settings中进行数据库链接sqlserver的时候sql_server.pyodbc用不了,随后切换到mssql才行,后来查阅后发现是版本问题导致 Django3.2本身不包含对SQLServer的直接支持。默认情况下,Django支持几种主流的数据库后端,例如SQLi......
  • MSSQL 建立链接服务器
     --建立Oracle数据库链接服务器EXECsp_addlinkedserver@server=N'POS',--要创建的链接服务器别名@srvproduct=N'Oracle',--产品名称@provider=N'OraOLEDB.Oracle',--OLEDB驱动名称@datasrc=N'192.168.1.240/gbpos'--数据源oracle"ora10g&qu......
  • 使用delete和Vue.delete删除数组元素的区别
    JavaScript中的delete运算符可以删除对象的属性,但是它不适用于数组。如果你试图使用delete运算符删除数组中的元素,你会发现该元素的值变为undefined,而数组的长度并没有改变。Vue.js提供了一个名为Vue.delete的方法,它可以帮助我们在删除数组元素时触发响应式更新。与原生JavaScrip......
  • Oracle误删除数据文件恢复---惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:Oracle误删除数据文件恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]有客户通过sftp误删除oracle数据文件,咨询我们是否可以恢复,通过远程上去检查,发现运气不错,数据库还没有c......
  • MSSQL Server 备份数据库脚本
    备份数据库脚本,实现如下脚本1.定时备份2. 平日以N开头,周一以W开头,每月1号以M开头,每年1月1日以Y开头, (保留最近7天,4周,12月和10年的备份)3.每周一还原备份到test库,并将密码改为123 declare@bakfilevarchar(100),@dbvarchar(100),@prevarchar(......
  • NET项目&DLL反编译&MSSQL监控&VS搜索&注入&上传
    知识点1.NET普通源码&编译源码2.DLL反编译&后缀文件&指向3.代码审计-SQL注入&文件上传ASPX文件->CSASPX.CSDLL反编译后寻找看核心代码分析漏洞CSASPX.CSDLL反编译文件->ASPX文件寻找确定漏洞进行调试测试代码审计时要把这个反编译文件提取导入到IDE中后期搜索关......
  • MSSQL中添加链接数据库
     ----添加mssqlwinddb--以下添加链接数据库脚本:WINDDB210是别名,SQLOLEDB是指链接SQLSERVER数据库,xxx.xxx.xxx.xxx是远程数据库地址,execmaster.dbo.sp_addlinkedserver'WINDDB210','','SQLOLEDB','xxx.xxx.xxx.xxx'--以下对添加链接数据库的登录用户:WINDDB210是别名,us......
  • 通过日志恢复MSSQL数据例子
        这段时间看了关于在SQLserver中通过日志和时间点来恢复数据。也看了一些网上的例子,看如何通过日志来恢复数据。    前提条件:数据库的故障恢复改为非简单模式,去掉自动关闭和自动收缩两个选项如果是简单模式:“完整”   测试环境:          1,建立数据......