0

以前は、SQL Server 2008 にデータベースの 1 つがあり、先月、それを SQL Azure に移動しました。

表では、列の 1 つが ID として設定され、自動インクリメントが設定されています。また、この列は主キーであり、他の多くのテーブルで外部キーとして参照されます。

自動増加

DB が SQL Server 2008 にある場合、この列の値は適切にインクリメントされ、生成された値のシーケンスに問題はありません。

DB を SQL Azure に移動した後、生成された値に突然ジャンプが発生しました。

1687 1688 1689 10001 10002 10003 . . 20100 20101

検索したところ、SQL Server 2012 と SQL Azure では "ID 増分" が保証されていないことがわかりました。また、SEQUENCE 機能は SQL Azure では使用できません (参照: http://connect.microsoft.com/SQLServer/feedback/details/723601/support-native-sequences-in-sql-azure )。

新しい列を追加して問題のある列を削除しようとしましたが、主キーであり、他のテーブルに依存しているため、この列を削除できません。

この移行された DB はビジネス クリティカルなものです。この問題をできるだけ早く克服する効率的な方法を教えてください。

4

2 に答える 2

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 に答える
0

データをインポートしようとしている場合は、整合性を保つためにデータを一括ロードするときに ID 挿入を使用する必要があります。

問題がアプリケーションを使用する過程にある場合、大きなジャンプが発生しますが、それは問題ではありません。ID は代理キーであり、値はビジネスで使用されません。ビジネスで使用する場合は、データベースの設計に問題があり、値を生成する別の方法 (キー プールなど) を使用する必要があります。

于 2013-11-01T04:38:30.090 に答える