我在Post
表中有超过50,000条记录。我想更新所有记录的time
,它应该像第一篇文章的当前时间和第二篇文章是当前时间 - 2小时等等。
每行的手动查询将是:
update Post set time = dateadd(hour, -2, sysdatetime()) where id = 1
update Post set time = dateadd(hour, -4, sysdatetime()) where id = 2
update Post set time = dateadd(hour, -6, sysdatetime()) where id = 3
我不能在所有记录上面做,这有一种方法可以在单个查询中实现这一点,如:
declare @time int
set @time = -2
update Post set time = dateadd(hour, @time + @time, sysdatetime())
答案 0 :(得分:1)
您可以使用可更新的CTE和窗口函数:
with toupdate as (
select p.*, row_number() over (order by id) as seqnum
from post p
)
update toupdate
set time = dateadd(hour, -2 * seqnum, sysdatetime()) ;