0

我有一个表,它有一个唯一的 ID 列,它是一个 int。这不一定包含最大的所有数字,有些被遗漏了(它不是身份列 - 我无法控制)。

我需要从该表中选择一些现有行并将它们添加到末尾以更改一列的数据,每一行都有一个新 ID,从 MAX ID 递增。像这样的东西:

declare @maxID int;
set @maxID = (select MAX("ID") from "table");

insert into "table"
select @maxID + ROW_NUMBER, 'newData', "col3", "col4"
from "table" where "col2" = 'oldData';

但是,我不确定从哪里获取它 - ROW_NUMBER 需要一个 OVER 语句,在这种情况下我真的不明白。

有什么帮助吗?

4

2 回答 2

0

从最简单的意义上说,OVER 子句只是指定要对行进行排序的列

ROW_NUMBER() OVER( ORDER BY [primarykey]) 

将为您提供“无间隙”代理主键

于 2013-07-09T14:29:18.580 回答
0

您需要按 ROW_NUMBER 生成数字的顺序。现有 ID 是不错的选择。

declare @maxID int;
set @maxID = (select MAX("ID") from "table");

insert into "table"
select @maxID + ROW_NUMBER OVER (ORDER BY "ID"), 'newData', "col3", "col4"
from "table" where "col2" = 'oldData';
于 2013-07-09T14:31:09.217 回答