我需要在Microsoft SQL Server中将数据从一个表迁移到另一个表。迁移到新表时,我想为特定列分配0-127范围内的下一个可用整数。
一个基本的实现是:
INSERT INTO table (columnName) SELECT MAX(columnName)+1 FROM table
但是这不能处理0-127的任意范围。我如何将操作限制在此范围内?
我还应该补充一点,即使可能有意义,我也不想在这里使用身份插入。
编辑:获取0-127的值后,它应该回绕并重新开始。
答案 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