Microsoft SQL Server:如何从任意范围中获取下一个可用整数

时间:2018-10-16 15:38:19

标签: sql sql-server

我需要在Microsoft SQL Server中将数据从一个表迁移到另一个表。迁移到新表时,我想为特定列分配0-127范围内的下一个可用整数。

一个基本的实现是: INSERT INTO table (columnName) SELECT MAX(columnName)+1 FROM table

但是这不能处理0-127的任意范围。我如何将操作限制在此范围内?

我还应该补充一点,即使可能有意义,我也不想在这里使用身份插入。

编辑:获取0-127的值后,它应该回绕并重新开始。

1 个答案:

答案 0 :(得分:1)

您显示的查询将为每个记录插入下一个数字。

您要使用row_number()+ MAX(columnName)

https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017

编辑:用于将数字限制为指定的最大值,然后从头开始,您可以进行这样的操作,即使在我不知道这可能有用的地方:

case when (row_number() over(columnName) + max(columnName)) > 127
then (row_number() over(columnName) + max(columnName)) % 127
else row_number() over(columnName) + max(columnName)
end