表示第一非空场

问题描述:

我创建了以下存储过程返回整数值表列:表示第一非空场

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

没有真正的捷径 - 只使用一个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