Sql server 围绕NULLIF包装ISNULL

Sql server 围绕NULLIF包装ISNULL,sql-server,stored-procedures,isnull,nullif,Sql Server,Stored Procedures,Isnull,Nullif,假设我有: 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),'

假设我有:

 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后,如下所示:

调用:“”(保留为空)

站立人数:777777

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


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

我认为下面这行有问题

when @ID ='2386002' then ISNULL(nullif(i.call,''),i.standingOrderNumber)
在这里,您试图检查
i.call
是否为空值,并用空字符串替换它,这使得
ISNULL
函数无效


解决方法是在提交表单时,不要在上面一行中使用
NULL如果

它是真的传递了一个空的还是将“”转换为NULL?你是什么意思?哎呀,打字。。。我在空后省略了“string”。也许我错了,我假设这个过程是从表单接收数据的,但现在在重新阅读之后,它似乎是另一种方式。更具体地说,此过程的输入源是什么?查看完整的代码(带有变量声明)也会很有帮助