首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理这么多isnull()情况的更容易的方法

处理这么多isnull()情况的更容易的方法
EN

Database Administration用户
提问于 2013-04-26 14:05:48
回答 3查看 7.1K关注 0票数 1

有什么好方法可以避免在存储过程中多次编写isnull()函数吗?

我有一个存储过程,它使用isnull()函数将近30次,我想我遗漏了一个概念,但在找到更好的方法获取数据之前,我很乐意从这么多isnull()函数中清除代码。

我是否可以将Server 2008 R2设置为使用空值作为浮点数0?如果没有数据,我的大部分isnull()只是添加零值,这样我就可以做数学操作了。

编辑:我并不懒惰,我只是试图清理代码,避免选择如下所示的部件

代码语言:javascript
复制
select  
   vrsta.NAZIV
   ,isnull(sum(prod.prod_mpci),0) as prod_MPCI
   ,isnull(sum(isnull(mal_MPCI,0) + (vel_kol * isnull(mal_MPC,vel_VPC))),0) as lager_mpci
   ,isnull(sum(vel_NCI),0)+isnulL(sum(mal_NCI),0) as lager_nci
   ,sum(   case 
            when isnull(vel_KOL,0)+isnull(mal_KOL,0) > isnull(prod.prod_kol,0) and isnull(dzn.dzn,'2010-01-01') < @dzu
                    then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_MPC,vel_VPC)
                    else 0 end
            ) as visak_MPC
   ,sum(   case 
            when isnull(vel_KOL,0)+isnull(mal_KOL,0) > isnull(prod.prod_kol,0) and isnull(dzn.dzn,'2010-01-01') < @dzu
                    then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_NC,vel_NC)
                    else 0 end
            ) as visak_MPC
    ,sum(   case 
            when isnull(vel_KOL,0)+isnull(mal_KOL,0) <= isnull(prod.prod_kol,0) 
                    then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_MPC,vel_VPC)
                    else 0 end
            ) as manjak_MPC

    ,sum(   case 
            when isnull(vel_KOL,0)+isnull(mal_KOL,0) <= isnull(prod.prod_kol,0) 
                    then ((isnull(vel_KOL,0)+isnull(mal_KOL,0))-isnull(prod.prod_kol,0)) * isnull(mal_NC,vel_NC)
                    else 0 end
            ) as manjak_NC
EN

回答 3

Database Administration用户

回答已采纳

发布于 2013-04-26 14:26:43

不,无法告诉Server将所有空浮点值视为零。您必须用ISNULL()或者,更好的是IMHO,COALESCE()包围这些表达式。您可以在视图中这样做,这样就不必在每个查询中重复它。

票数 6
EN

Database Administration用户

发布于 2013-04-26 20:06:53

我有一个类似的查询,显示了大量的封装ISNULL语句。我需要空值来表示未被触摸的项(因为许多列都需要不同的更改标识符)。我尝试了无数种不同的方法来解决这个问题,最后却得到了一段长得令人讨厌的代码,其中包含了一堆ISNULLs。关于“长得令人讨厌的编码,加上一堆ISNULLs”的重要之处在于,它每次都对我来说是完美的。我建议仅仅找到一种模式来使用它们来清理代码的外观并使其在一般情况下更容易导航。

至于使用合并的建议,我不会建议它取决于您试图返回的记录的数量。我一遍又一遍地读到,合并可能会对性能造成影响,尽管有一些好处。

https://stackoverflow.com/questions/7408893/isnull-vs-coalesce http://www.sqlservercentral.com/Forums/Topic832742-392-5.aspx#bm1352397

票数 2
EN

Database Administration用户

发布于 2013-04-30 04:13:03

isnulls转储到内部查询中,并在外部使用它们,可能是为了避免使用多个isnulls?

代码语言:javascript
复制
SELECT A 
FROM (SELECT ISNULL (A, 0) FROM TABLEA) A
...
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/41015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档