添加到变量的SQL行数

添加到变量的SQL行数,sql,sql-server,database,row-number,Sql,Sql Server,Database,Row Number,我有一个表,它有一个唯一的ID列,它是一个int。这不一定包含所有最大值的数字,有些数字遗漏了(它不是一个标识列-我无法控制) 我需要从该表中选择一些现有行,并将它们添加到末尾更改一列的数据,每行都有一个新的ID,从最大ID开始递增。类似如下: declare @maxID int; set @maxID = (select MAX("ID") from "table"); insert into "table" select @maxID + ROW_NUMBER, 'newData', "

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

我需要从该表中选择一些现有行,并将它们添加到末尾更改一列的数据,每行都有一个新的ID,从最大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';
然而,我不知道从这里该怎么说——行数需要一个OVER语句,在这里我真的不理解


有什么帮助吗?

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

ROW_NUMBER() OVER( ORDER BY [primarykey]) 

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

您需要对生成数字的行编号进行排序。在这里,现有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';

太好了,谢谢。你能详细解释一下为什么需要OVER语句,而不是简单地枚举SELECT结果吗?
ROW\u NUMBER
语法需要
OVER
关键字。再简单不过了<代码>按排序是必需的,因为
行编号
不知道按哪个顺序枚举。数据库中的行在逻辑上没有“自然”顺序(尽管我们人类倾向于将自然顺序视为与聚集索引顺序相同),因此行编号需要有一些线索,知道您希望查看记录的顺序。