我有一个具有唯一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语句,在这种情况下我真的不明白。
任何帮助?
答案 0 :(得分:0)
在最简单的意义上,OVER子句只是指定在
中对行进行排序的列ROW_NUMBER() OVER( ORDER BY [primarykey])
会给你一个'无间隙'代理主键
答案 1 :(得分: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';