如何使用新值更新表中的记录列表,具体取决于旧值

Vba*_*now 0 sql-server sql-update

我有一个名为acc1152的表,字段为accno.取决于该字段的值,我需要用新值替换它.这些是我需要更新的值

old value   new value
  7007        4007
  7008        4008
  4008        7
  7009        4009
  7011        4011
  4011        ' '
  7010        4010
  4010        1
  7016        4016
  4016        1
  4506        4006
  4512        4012
Run Code Online (Sandbox Code Playgroud)

如果记录在其accno字段中具有上面的旧值,则该accno需要用新值替换

如何编写一个可以完成此任务的查询?

Kri*_*ner 5

您可以case在update语句中使用语句,如下所示:

update acc1152
set [columnName] = 
    case [columnName]
        when '7007' then '4007'
        when '7008' then '4008'
        -- etc
        when '4512' then '4012'
    else
        [columnName] end
Run Code Online (Sandbox Code Playgroud)

或者更好的方法(IMO)将使用临时/变量表来跟踪您的旧/新映射

declare @someTable table (oldValue varchar(50), newValue varchar(50))
insert into @someTable (oldValue, newValue)
select '7007','4007'
union all select '7008','4008'
-- etc
union all select '4512','4012'

update acc1152
set [columnName] = st.newValue
from acc1152 a
inner join @someTable st on a.[columnName] = st.oldValue
Run Code Online (Sandbox Code Playgroud)