2011-09-28 69 views

回答

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 

这样你就可以运行选择,看看提前正是每个值将被更改为。

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)