更新数据略有不同的所有记录

时间:2018-02-03 18:38:17

标签: sql sql-server

我在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())

1 个答案:

答案 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()) ;