2015-08-28 81 views
1

我有状态表和存储56个状态和ID,并且我正在基于存储在[Cases]表中的那些ID更新FieldValue表中的值列。我可以用case语句来得到的结果,我不想再重复case语句56倍更新表格

Update cv 
set Value = 
     case when 
      c.[state] = 1 then 13 
      c.[state] = 2 then 14 
      c.[state] = 3 then 15 
      . 
      . 
      . 
     End  
from 
    [Cases] c 
join 
    [files] f on f.FileName = c.Name 
join 
    Recordset CR on CR.RecordId = f.id and RecordId = 3 
join 
    FieldValue cv on cv.RecordsetId = cr.Id and cv.FieldId = 6 
where 
    c.[State] is not null 

回答

0

如果状态和更新值有某种关系的(就像值=状态+ 12,我看到在你的例子),你可以做

update cv 
set value = c.[state] +12 
from [Cases] c 
join [files] f on f.FileName = c.Name 
join Recordset CR on CR.RecordId = f.id and RecordId = 3 
join FieldValue cv on cv.RecordsetId = cr.Id and cv.FieldId = 6 
where c.[State] is not null 

如果没有任何关系,你要么需要写56行,或返回预期值(它里面将56线长的函数),这是在未来需要新的价值的情况下更好的支持

update cv 
set value = fn_value_from_state(c.[state]) 
from [Cases] c 
join [files] f on f.FileName = c.Name 
join Recordset CR on CR.RecordId = f.id and RecordId = 3 
join FieldValue cv on cv.RecordsetId = cr.Id and cv.FieldId = 6 
where c.[State] is not null 

即使在第一种情况下,如果价值状态关系发生变化,功能也会更好