2012-07-06 24 views
0

我創建了以下存儲過程返回整數值表列:表示第一非空場

deIntroText,deCompanyText,deTimetableText和deExampleText

,我需要爲從SELECT返回的每個記錄做到這一點。

於是我意識到我需要創建一個臨時列將其存儲在,我想你需要使用IF語句是這樣的:

IF deIntroText IS NOT Null 
THEN TempFieldToReturn = 1 

ELSE IF deCompanyText IS NOT Null 
THEN TempFieldToReturn = 2 

ELSE IF deTimetableText IS NOT Null 
THEN TempFieldToReturn = 3 

ELSE IF deExampleText IS NOT Null 
THEN TempFieldToReturn = 4 

所以我的問題是 - 什麼是實現這一目標的最佳方式任何例子,將不勝感激。

+0

爲什麼不在數據訪問層上執行該操作,而不是數據層本身? – abatishchev 2012-07-06 08:04:39

回答

4

沒有真正的捷徑 - 只使用一個CASE表達:

SELECT 
    /* Other Columns */ 
    CASE 
    WHEN deIntroText IS NOT Null THEN 1 
    WHEN deCompanyText IS NOT Null THEN 2 
    WHEN deTimetableText IS NOT Null THEN 3 
    WHEN deExampleText IS NOT Null THEN 4 
    ELSE 5 END as OtherColumn 
FROM 
    /* Rest of query */ 

這是一個搜索CASE - 實際上也有CASE兩個變種。如果所有的列都是NULL,我猜對了5 - 如果你想在這種情況下得到NULL的結果,你可以離開ELSE 5部分。

+1

+1如果CHARINDEX或PATINDEX可以通過,ELSE 0也可以作爲選項。 – 2012-07-06 11:43:18