【问题标题】:update table in short way快速更新表格
【发布时间】:2015-08-28 19:50:17
【问题描述】:

我有 states 表并存储了 56 个 state 和 ID,并且我正在根据存储在 [Cases] 表中的那些 ID 更新我在 FieldValue 表中的 value 列。我可以用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

【问题讨论】:

    标签: sql sql-server-2012-express


    【解决方案1】:

    如果状态和要更新的值有某种关系(就像我在您的示例中看到的值 = 状态 + 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2012-10-29
      • 2015-01-24
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      相关资源
      最近更新 更多