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

ami*_*mit 1 sql sql-server-2008

我想改变seqid:

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

使用一个更新语句.

UserID  seqid
1        1 
1        2
1        3  
1        4
Run Code Online (Sandbox Code Playgroud)

Red*_*ter 8

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

假设(根据您的问题)您希望seqid4修改:

update MyTable
set seqid = seqid + 1
where seqid between 1 and 3
Run Code Online (Sandbox Code Playgroud)

如果你只想增加每一个seqid,请执行:

update MyTable
set seqid = seqid + 1
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

update mt
set seqid = seqid + 1 
--select seqid, seqid+1, * 
From MyTable mt
where seqid between 1 and 3 
Run Code Online (Sandbox Code Playgroud)

这样您就可以运行select并提前查看每个值将被更改的内容.