Sql 处理空白查询结果,ISNULL(NULLIF())
我试图将查询结果返回到变量中,以便我能够在insert语句中使用它。但是,我的select始终返回null,即使我相信已正确设置了Sql 处理空白查询结果,ISNULL(NULLIF()),sql,sql-server,Sql,Sql Server,我试图将查询结果返回到变量中,以便我能够在insert语句中使用它。但是,我的select始终返回null,即使我相信已正确设置了ISNULL(NULLIF()) declare @test varchar(10) set @test = (select ISNULL(NULLIF(discnumber,''),'NA') from discmaster where meteredfilename = '3501' or nonmeteredfilename='3501') select
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%确定该方法。而不是ISNULL(NULLIF(discnumber),,'NA')
尝试
COALESCE(discnumber,'NA')
我会将ISNULL
移到子查询之外-如果子查询没有返回结果怎么办
set @test = COALESCE(
(select NULLIF(discnumber,'')
from discmaster
where meteredfilename = '3501' or nonmeteredfilename='3501')
,'NA')
(我也是个势利小人,将
ISNULL
替换为COALESCE
。在少数情况下,coalsce
是更好的函数)。select语句仍然使用COALESCE返回空值discnumber是哪种SQL字段?您能为discmaster提供表定义吗?同意,这可能是一个不返回任何行的查询。但是:为什么说COALESCE
从根本上优于ISNULL
?@Philip-因为它可以泛化为两个以上的参数,并且返回类型基于两个(或所有)参数类型(即它使用类型优先规则),而不是试图强制第二个参数的类型为第一个参数的类型。例如,选择ISNULL(CAST(null为CHAR(2)),'abc')
返回'ab'
。太棒了,成功了。谢谢大家的帮助。n@Damien_The_Unbeliever返回类型基于所有参数类型是什么意思?这与isnull相比如何?如果一个参数中有一个varchar,另一个参数中有一个int,那么它的返回类型是什么?或者varbinary,varchar,int?@FistOfFury-我在前面的评论中给出了一个例子-如果您有ISNULL(char(2),varchar(50))
,您将得到char(2)
结果COALESCE(char(2),varchar(50))
将返回一个varchar(50)
。对于varchar,int
,它将强制它成为varchar
(这可能是您想要的,但如果我不想要int
结果,我更愿意遵循通常的优先规则并插入显式转换)