使用多个字符串验证连接单行?

时间:2016-06-23 04:52:24

标签: sql sql-server

在下面的查询中,如果两个条件都为真,则在ErrorMessage中更新最后一个条目。如果一个记录的国家/地区超过3个字符且HR_DOMAIN_Code的长度不等于3,那么ErrorMessage应该看起来像“无效国家”和“无效国家”。 'HR_DOMAIN_CODE'无效:

update A     
set ErrorMessage =       
(      
 case when len(Country) > 3    then 'Invalid Country'        
 when len(HR_DOMAIN_CODE) != 3   then 'Invalid HR_DOMAIN_CODE'        
 else NULL       
 end)  

如果可以使用case语句?

1 个答案:

答案 0 :(得分:2)

您可以添加另一个WHEN来处理这两个条件:

UPDATE A
SET ErrorMessage =
    CASE
        WHEN LEN(Country) > 3 AND LEN(HR_DOMAIN_CODE) != 3 THEN 'Invalid Country & Invalid HR_DOMAIN_CODE'
        WHEN LEN(Country) > 3 THEN 'Invalid Country'
        WHEN LEN(HR_DOMAIN_CODE) != 3 THEN 'Invalid HR_DOMAIN_CODE'
        ELSE NULL
    END

但是,一旦有多个组合需要检查,上面的内容会非常复杂。我的建议是对每个条件使用单独的CASE表达式。像这样:

UPDATE A
SET Errormessage = STUFF((
    SELECT
        CASE WHEN LEN(Country) > 3 THEN '& Invalid Country' ELSE '' END + 
        CASE WHEN LEN(HR_DOMAIN_CODE) != 3 THEN '& Invalid HR_DOMAIN_CODE' ELSE '' END
    ), 1, 2, '')