遍历表中的所有记录并在 SQL Server 中编辑列

H. *_*lyn 0 sql-server update sql-server-2014

如何遍历 SQL Server 表中的所有行并编辑列?你知道的:

  • 跳过了很多ID。
  • creatie每次一分钟都必须对该列进行编辑。所以第一个必须是 15:00:00,第二个 15:01:00,第三个 15:02:00 等等。
  • 总共有 54 条记录。
  • 我使用的是 SQL Server 2014 Express 版本

我使用了下面的查询,但最大 ID 是 24697...所以循环很长。

declare @var datetime = '2015-10-19 0:0:0';
declare @counter int = 1;
declare @max int = (select max(id) from topic);

while (@counter <= @max) begin
    update Topic set Creatie = Creatie + @var where id = @counter;
    set @counter += 1;
    set @var += '0-0-0 0:1:0'
end;
Run Code Online (Sandbox Code Playgroud)

因为我每次都这样做@var += '0-0-0 0:1:0',我不知道 24697 次后的结果是什么(如果它有效)。

这是前 25 行。

前 25 行

PS1:2131年是我自己的错误。不要看它并使用2015年。

PS2:我使用 24 小时时钟。

Aar*_*and 6

不,不要循环。每当您在 SQL 中想到“我需要遍历这个集合并对每一行做一些事情”时,将您的想法更改为“我需要对这个集合中的每一行做一些事情”。

DECLARE @start SMALLDATETIME = '2015-08-06T15:00:00';

;WITH x AS 
(
  SELECT id, creatie, rn = ROW_NUMBER() OVER (ORDER BY id) - 1
  FROM dbo.Topic
  --WHERE creatie = '2131-08-06T15:00:00'
)
SELECT id, creatie, DATEADD(MINUTE, rn, @start) FROM x ORDER BY id;
-- UPDATE x SET creatie = DATEADD(MINUTE, rn, @start);
Run Code Online (Sandbox Code Playgroud)

当您对这符合您的期望感到高兴时,请注释SELECT并取消注释UPDATE.