2017-06-14 45 views
0

我正在使用SQL Server管理工作室2014.重置后自动编号为每个不同的列值

我有2个表:国家和地点。

国家有一个属性Id和其他列。

位置有一个属性Id,LocationNumber,CountryId。

在旧应用程序中,当您删除locationNumber时,它将保存数据错误。

所以我想重置所有的位置编号并重新插入。

假设我有这样的数据集:

地点:

Id | LocationNumber | CountryId 
------------------------------- 
1 |  1  |  1 
2 |  3  |  1 
3 |  1  |  2 
4 |  4  |  2 

现在我想重置每countryId的locationNumber所以它会成为这个数据集:

Id | LocationNumber | CountryId 
------------------------------- 
1 |  1  |  1 
2 |  2  |  1 
3 |  1  |  2 
4 |  2  |  2 

它应该是用查询完成而不用增量属性。

谢谢,布伦特

+0

你只是指/自动增量由/身份产生“间隙”产生的序列列?如果是这样,这是预期的行为,没有什么可担心的,真的应该一个人留下。无间隙序列是一件“坏事”,因为你必须序列化序列后面的所有东西! (没有并发udpates =有点像单用户数据库。) –

回答

1

你可以试试这个查询:

Select Id, ROW_NUMBER() OVER(PARTITION BY CountryId ORDER BY LocationNumber) 
AS LocationNumber, CountryId FROM Locations