SQL Server 2005 で IDENTITY 列が最大値に達した場合はどうなりますか? 最初から始めて、ギャップを埋め始めますか?
この問題が発生した場合、SQL Server 2005 はどのような動作をしますか?
SQL Server 2005 で IDENTITY 列が最大値に達した場合はどうなりますか? 最初から始めて、ギャップを埋め始めますか?
この問題が発生した場合、SQL Server 2005 はどのような動作をしますか?
最大値に達すると、オーバーフロー エラーが発生します。これの最大値でbigintデータ型を使用する場合、9,223,372,036,854,775,807
ほとんどの場合、そうではありません。
表示されるエラー メッセージは次のようになります。
Msg 220, Level 16, State 2, Line 10
Arithmetic overflow error for data type tinyint, value = 256.
私の知る限り、MS SQL には ID のギャップを埋める機能はありません。そのため、自分でこれを行うか、ID 列のデータ型を変更する必要があります。
これに加えて、開始値を最小の負の数に設定して、使用する値の範囲をさらに広げることができます。
それはギャップを埋めません。代わりに、列の定義を変更して ID を削除し、ギャップを埋める他の方法を見つけるか、サイズを大きくする (int から bigint に変更する) か、データの型を変更する (int から decimal に変更する) まで、挿入は失敗します。 ) より多くの ID 値を使用できるようにします。
問題を解決するまで、新しい行を挿入できず、上記のエラー メッセージが表示されます。これにはいくつかの方法があります。まだデータがあり、すべての ID を最大値未満で使用している場合は、データ型を変更する必要があります。データが定期的に消去され、使用されない大きなギャップがある場合は、ID 番号をそのギャップの最小番号に再シードできます。たとえば、以前の仕事では、トランザクションをログに記録していました。1 か月あたり 4,000 万から 5,000 万ほどありましたが、6 か月より古いものはすべてパージしていたため、数年ごとに ID は 20 億近くになりましたが、15 億未満の ID を持つものは何もないため、再シードしました。 0 に戻ります。これらのいずれも機能しない可能性があり、別の解決策を見つける必要があります。
「古い値」を時々削除する場合は、DBCC CHECKIDENT ('MyTable', RESEED, 0); を使用してシードをリセットするだけです。
ID 列が整数の場合、最大値は 2,147,483,647 です。それを超えると、オーバーフロー エラーが発生します。
これがリスクだと思われる場合は、最大 9,223,372,036,854,775,807 までの BIGINT データ型を使用してください。これほど多くの行を持つデータベース テーブルを想像することはできません。
ここでさらに議論します。(言及されたxslと同じリンク)。
ID 列の最大数に達した場合は、そのテーブルからより大きな ID 列タイプを持つセカンダリ テーブルにデータを移動し、その新しい ID 値の開始値を以前の最大値に指定できます。タイプ。新しい ID 値は、その時点から継続します。