0

早些时候,我们在 SQL Server 2008 中有一个数据库,上个月我们将它移到了 SQL Azure。

在表中,其中一列设置为标识并设置了自动增量。此列也是主键,在许多其他表中被引用为外键。

自动递增

当我们的数据库在 SQL Server 2008 中时,此列值已正确递增,并且生成值的顺序没有问题。

将我们的数据库移动到 SQL Azure 后,生成的值突然跳跃为

1687 1688 1689 10001 10002 10003。. 20100 20101

在搜索中,我发现在 SQL Server 2012 和 SQL Azure 中不能保证“身份增量”。SQL Azure 中也没有 SEQUENCE 功能(请参阅:http ://connect.microsoft.com/SQLServer/feedback/details/723601/support-native-sequences-in-sql-azure )。

我尝试添加一个新列并删除有问题的列,但由于它是主键并依赖于其他表,因此我无法删除此列。

这个迁移的数据库是一个业务关键的数据库。请让我知道尽快解决此问题的有效方法。

4

2 回答 2

0

如果您尝试导入数据,则应在批量加载数据时使用身份插入以保持完整性。

如果问题出在使用应用程序的过程中,你会得到很大的跳跃,那么这不应该是一个问题,身份是一个代理键并且值没有商业用途。如果它们确实有业务用途,那么您有一个数据库设计问题,并且可能应该使用不同的方法来生成值(即密钥池)。

于 2013-11-01T04:38:30.090 回答
0

http://msdn.microsoft.com/zh-tw/library/ms176057.aspx

尝试使用 DBCC CHECKIDENT 来调整您的列:

DBCC CHECKIDENT 
( 
table_name
  [, { NORESEED | { RESEED [, new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
于 2014-10-05T03:39:10.837 回答