hitl 发表于 2013-3-17 16:50:44

SQL Server中 NULL数据概述

在Sql Server中当用户比较函数或数据函数中时, NULL可能会存在些问题,能够导致无法预测的结果.首先说下NULL和数学1 如果NULL出现在任何SQL数学中,则结果总是NULL.下面演示一个实例 . 查询三个表的数据,并且要求卡号是UserID= 2, 还是未结账状态的.并且将得到的数据相加 下面是存储过程中的事务代码 ALTERPROCEDURE.   -- Add the parameters for the stored procedure here   @userIDvarchar(15)ASBEGIN   -- SET NOCOUNT ON added to prevent extra result sets from   -- interfering with SELECT statements.   SETNOCOUNTON;beginTran--开始事务    selectCOUNT(cardID)as'售卡张数'fromT_StudentInfowhereuserID=@userIDandidentify='未结账'    selectCOUNT(cardID)as'退卡张数',COALESCE(sum(cancelCash),0)as'退卡金额'fromT_CancelwhereuserID=@userIDandstatue='未结账'   selectcoalesce(sum(addMoney),0)as'充值金额'fromT_Rechargewhere userID =@userIDandstatue='未结账'    updateT_StudentInfo setidentify='已结账'whereuserID=@userIDandidentify='未结账'   updateT_Cancelsetstatue ='已结账'whereuserID=@userIDandstatue='未结账'   updateT_Rechargesetstatue ='已结账'whereuserID=@userIDandstatue='未结账'   declare@RegionErrorint   select@RegionError=@@ERROR--每执行完一条t-sql语句马上进行检测,并把错误号保存到局部变量中   if (@RegionError =0) --判断如果两条语句都执行成功   commitTran--执行事务   else   ROLLBACKTran--回滚事务END 想象一个下,我们查询充值金额,如果查到的数据是0 或具体的数字,那么它相加后返回的结果也应该是0或具体数字才对呢. 而实际得到的结果却不是我们想要的 执行存储过充后 我们看到执行后充值金额的返回值是NULL,这个值是无法进行数学相加的。这就是NUlL表示的未知数据,而不是任意特定值 因此我们要特别注意NULL的处理,尤其是在数学中。确保返回的值不是NULL。为了解决这个问题,可以选择过滤到NULL结果。或是使用一个函数将NULL值改为最终用户能理解的东西。 这里COALESCE()函数就是很好的作用 COALESCE :返回其参数中第一个非空表达式。语法COALESCE ( expression [ ,...n ] )参数expression任何类型的表达式。n表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。 返回类型将相同的值作为 expression返回。注释如果所有自变量均为 NULL,则 COALESCE返回 NULL值 所以以上的错误修改方式是在求和前加上这个函数select coalesce(sum(addMoney),0) as '充值金额' from T_Recharge where userID =@userID and statue ='未结账'
到这里这个问题就完成解决了。下篇博客继续讲述NULL的用法,再述NULL

0 发表于 2013-3-18 02:35:26

cxin 发表于 2013-5-16 16:06:12

避孕的效果:不成功,便成“人”。

linuxx 发表于 2013-5-18 03:32:46

男人靠的住,母猪能上树!

【魄爺】 发表于 2013-5-19 12:23:28

爱护环境,人人有病。

wuaji 发表于 2013-5-21 02:01:41

在一辆拥挤的公车上,一位女郎忽然叫了起来:别挤啦!别挤啦!把人家的奶都挤出来啦!(她拿着酸奶呢)。

iszjw 发表于 2013-5-22 08:57:40

饭在锅里,我在床上*^_^*
页: [1]
查看完整版本: SQL Server中 NULL数据概述