【问题标题】:Wrapping ISNULL around NULLIF将 ISNULL 包裹在 NULLIF 周围
【发布时间】:2018-06-13 12:34:40
【问题描述】:

假设我有:

 case  
    when @ID ='2386002' then ISNULL(nullif(i.call,''),i.standingOrderNumber)  
    when nullif(rtrim(i.call),'') is null then 
            nullif(rtrim(i.standingOrderNumber), '')
    else case when nullif(rtrim(i.standingOrderNumber),'') is null then rtrim(i.call) 
         else  
            rtrim(i.call)  

这只是在两个应用程序之间进行同步的过程的一部分,问题是standingOrderNumber 不同步,我认为它与此代码部分有关。

场景: 像这样输入 call 和 StandingOrderNumber 后:

调用:''(留空)

standingOrderNumber: 777777

数据存储在一个表中,过程从该表中获取数据并将其显示在应用程序表单上,问题是,所有内容都正确显示,除了这个standingOrderNumber。

你能告诉我上面提交的逻辑是否有问题吗?

【问题讨论】:

  • 当您提交表单时,它是真正传递一个空还是将 '' 转换为 NULL?
  • 什么意思?
  • 糟糕,错字...我在空后省略了“字符串”。也许是错误的,我认为这个过程是从表单接收数据,但现在重读后似乎是另一种方式。更具体地说,这个过程的输入来源是什么?查看完整代码(带有变量声明)会有所帮助

标签: sql-server stored-procedures isnull nullif


【解决方案1】:

我认为下面一行有问题,

when @ID ='2386002' then ISNULL(nullif(i.call,''),i.standingOrderNumber)

在这里,您尝试检查 i.call 的空值并将其替换为空字符串,这使得 ISNULL 函数无用。

解决方法是不要在上面的行中使用nullif

【讨论】:

    猜你喜欢
    • 2015-05-09
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多