需要在SQL Server 2008中打印所有缺少值的列名称

时间:2014-12-15 14:59:03

标签: sql sql-server string sql-server-2008-r2

我需要在单个字符串中缺少必需值的所有列名,在下面显示的select语句中。

我尝试过使用CASE语句,但它没有工作,因为如果第一个匹配,它会省略第二个条件。

SELECT
    stg2.StageID
    ,[CSP]
    ,[CSPRegionID]
    ,[SoldToCompanyID]
    ,[EndUserCompanyID]
    ,[SupportOptionID]
    ,'One/More Mandatory value/s is/are missing' FailureReason
    ,CASE   WHEN stg2.CSP IS NULL THEN @FailureDetails + 'CSP' 
            WHEN stg2.CSPRegionID IS NULL THEN @FailureDetails + 'CSP Region' 
            WHEN stg2.SoldToCompanyID IS NULL THEN @FailureDetails + 'SoldToCompany' 
            WHEN stg2.EndUserCompanyID IS NULL THEN @FailureDetails + 'EndUserCompany' 
            WHEN stg2.SupportOptionID IS NULL THEN @FailureDetails + 'SupportOption' 
    END FailureDetails
FROM [EntitlementTracker_SRV4Stage].[dbo].[srv4_ClassicLoad_Stage2] stg2
WHERE stg2.CSP IS NULL
OR stg2.CSPRegionID IS NULL
OR stg2.SoldToCompanyID IS NULL
OR stg2.EndUserCompanyID IS NULL 
OR stg2.SupportOptionID IS NULL

任何人请帮忙。提前谢谢。

1 个答案:

答案 0 :(得分:5)

你是对的,CASE只会评估匹配的第一个案例。我建议像:

,  CASE WHEN stg2.CSP              IS NULL THEN 'CSP, '            ELSE '' END
 + CASE WHEN stg2.CSPRegionID      IS NULL THEN 'CSP Region, '     ELSE '' END
 + CASE WHEN stg2.SoldToCompanyID  IS NULL THEN 'SoldToCompany, '  ELSE '' END
 + CASE WHEN stg2.EndUserCompanyID IS NULL THEN 'EndUserCompany, ' ELSE '' END
 + CASE WHEN stg2.SupportOptionID  IS NULL THEN 'SupportOption, '  ELSE '' END
 FailureDetails