2011-07-26 126 views
3

我试图返回查询结果到一个变量,我能够在插入语句中使用它。但是,即使我相信我的ISNULL(NULLIF())设置正确,我的选择仍然返回null。处理空白查询结果,ISNULL(NULLIF())

declare @test varchar(10) 

set @test = (select ISNULL(NULLIF(discnumber,''),'NA') 
from discmaster 
where meteredfilename = '3501' or nonmeteredfilename='3501') 

select @test 

看起来正确但仍然返回NULL值。你会选择案例,但不是100%确定该方法。

回答

6

我移动ISNULL外的子查询 - 如果子查询没有返回结果?

set @test = COALESCE(
      (select NULLIF(discnumber,'') 
       from discmaster 
       where meteredfilename = '3501' or nonmeteredfilename='3501') 
     ,'NA') 

(我也一直是一个势利与COALESCE取代ISNULL。几个场景外,COAELSCE是更好的功能)。

+0

同意,这可能是一个不返回行的查询。但是:你为什么说'COALESCE'基本上比'ISNULL'好? –

+1

@Philip - 因为它泛化为2个以上的参数,并且返回类型基于两个(或所有)参数类型(即它使用类型优先规则),而不是试图强制第二个参数的类型与第一个参数的类型。例如。 '选择ISNULL(CAST(null作为CHAR(2)),'abc')'返回''ab''。 –

+0

太棒了,做到了。感谢所有帮助的人n.n –

0

而不是ISNULL(NULLIF(discnumber,''),'NA')

尝试COALESCE(discnumber,'NA')

+0

select语句仍使用Coalesce返回空值 –

+0

什么样的SQL字段是discnumber?你能提供discmaster的表格定义吗? –