如何仅使用一次更新来更新3条记录?

时间:2011-09-28 14:06:19

标签: sql sql-server-2008

我想更改seqid

  • 2而不是1
  • 3而不是2
  • 4而不是3

使用一个更新声明。

UserID  seqid
1        1 
1        2
1        3  
1        4

2 个答案:

答案 0 :(得分:8)

确保在运行任何更新之前进行备份,以防出错。

假设(根据你的问题)你做想要seqid 4修改:

update MyTable
set seqid = seqid + 1
where seqid between 1 and 3

如果您只想增加seqid,请执行:

update MyTable
set seqid = seqid + 1

编辑添加: 如果你想在提交之前看到你正在做的事情的结果(做出这种改变时的一个好主意):

begin tran
select seqid, count(*) 
from Mytable 
where seqid between 1 and 4

update MyTable 
set seqid = seqid + 1 
where seqid between 1 and 3 

select seqid, count(*) 
from Mytable 
where seqid between 1 and 4
--rollback tran
--commit tran

如果您看到Seqids的数量是正确的并且不要忘记提交;请特别在prod上打开交易!但这对于测试更新或删除是个好主意,当你不肯定会产生什么样的影响时。

如果您有一个复杂的更新,另一种尝试的方法是:

update mt
set seqid = seqid + 1 
--select seqid, seqid+1, * 
From MyTable mt
where seqid between 1 and 3 

通过这种方式,您可以运行选择并提前查看每个值将被更改的内容。

答案 1 :(得分:2)

这是更一般的情况,它不会假设旧值和新值之间的关系:

update foo
set seqid = case seqid
              when 1 then 2
              when 2 then 3
              when 3 then 4
            end
where seqid in (2,3,4)