2011-07-26 204 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的表格定義嗎? –