2011-09-28 74 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)