2013-01-03 59 views
2

对于以下查询结果中的人员,UniqueIDSuffix值应该用字符长度= 6的前导0填充。在UniqueIDSuffix修改后,UniqueID值应通过UniqueIDPrefix更新为字符长度= 9 + UniqueIDSuffix = UniqueID的使用case语句更新字段

select * from cph..cppat (nolock) where 
UniqueIDPrefix is not null and 
UniqueIDPrefix <> 'VIS' and len(UniqueIDSuffix) < 6 

为了通过UniqueIDPrefix ASC

我的说法是:

SET UniqueIDsuffix = 
     (CASE 
      WHEN UniqueIDsuffix = 3 THEN '000' + UniqueIDsuffix ELSE 
      When UniqueIDsuffix = 4 THEN '00' + UniqueIDsuffix ELSE 
      WHEN UniqueIDsuffix = 5 Then '0' + UniqueIDsuffix ELSE 
      WHEN UniqueIDsuffix = 6 THEN UniqueIDsuffix ELSE 
      ) 
where UniqueIDPrefix is not null and UniqueIDPrefix <> 'VIS' 
and len(UniqueIDSuffix) < 6 

回答

3

你一个重新丢失更新声明。 。 。并且你有多余的else陈述。 。 。和你缺少从比较len()功能:

update cph..cppat 
    SET UniqueIDsuffix = 
      (CASE WHEN len(UniqueIDsuffix) = 3 THEN '000' + UniqueIDsuffix 
        When len(UniqueIDsuffix) = 4 THEN '00' + UniqueIDsuffix 
        WHEN len(UniqueIDsuffix) = 5 Then '0' + UniqueIDsuffix 
        WHEN len(UniqueIDsuffix) = 6 THEN UniqueIDsuffix 
      ) 
    where UniqueIDPrefix is not null and UniqueIDPrefix <> 'VIS' and len(UniqueIDSuffix) < 6 

顺便说一句,你可以表达这个更简单地为:

update cph..cppat 
    SET UniqueIDsuffix = right('0000000'+UniqueIDSuffix, 6) 
    where UniqueIDPrefix is not null and UniqueIDPrefix <> 'VIS' and len(UniqueIDSuffix) < 6