变相怪杰 发表于 2015-1-16 14:07:10

sql server中除数为零的处置技能

Merge将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用在sqlserver中做除法处置的时分,我们常常必要处置除数为零的情形,由于假如碰到这类情形的时分,sqlserver会抛出碰到以零作除数毛病的非常,我们总不但愿把这个非常显现给用户吧。

做个会报这个毛病的示例,如以下sql代码:
declare@aint;
declare@bint;
set@a=10
set@b=0
select@a/@b

运转就会抛出碰到以零作除数毛病的毛病

本章次要解说一下怎样在sqlserver处置除数为零的两种办法:
一,使用case语句。
我们改写下面的sql,当@b=0的时分,我们就前往1.改写以下:
declare@aint;
declare@bint;
set@a=10
set@b=0
selectcase@bwhen0then1else@a/@bend

如许写固然是准确的,但显的贫苦,上面我们看一下第二处置办法。

二,使用nullif函数。
nullif函数有两个参数,界说以下:
NULLIF(expression,expression)
其感化就是:假如两个指定的表达式相称,就前往null值。
看一示例:
selectnullif(0,0)

运转了局:null

我们晓得,null与任何数举行任何运算,其了局都即是null,使用这点,我们能够将下面的sql改写为:
declare@aint;
declare@bint;
set@a=10
set@b=0
select@a/nullif(@b,0)

其运转了局天然为null了。

再使用isnull函数,我们就能够完成当@b=0的时分,了局前往1的需求了。终极的sql改写以下:
declare@aint;
declare@bint;
set@a=10
set@b=0
selectisnull(@a/nullif(@b,0),1)

OK,两种办法先容终了,相对办法一,我更保举人人利用办法二,由于办法二的代码更简省。

(假如有伴侣对isnull函数不懂得的话,这里能够注释一下。
isnull的界说以下:
isnull(参数1,参数2)
其感化就是,当参数1即是null时,就前往参数2的值。)MySQL最初的开发者的意图是用mSQL和他们自己的快速低级例程(ISAM)去连接表格。经过一些测试后,开发者得出结论:mSQL并没有他们需要的那么快和灵活。

只想知道 发表于 2015-1-25 17:12:38

每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。

变相怪杰 发表于 2015-2-3 12:00:07

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

小女巫 发表于 2015-2-8 22:44:45

这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。

柔情似水 发表于 2015-2-26 13:17:59

你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。

莫相离 发表于 2015-3-8 15:25:21

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

兰色精灵 发表于 2015-3-16 03:52:24

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

灵魂腐蚀 发表于 2015-3-22 20:10:20

having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
页: [1]
查看完整版本: sql server中除数为零的处置技能