テーブルがあるとします。最初の列は ID です。自動的に一つ一つ価値が生まれてくると思いました。この列があるとします
1
2
3
4
...
47
48
49
50
最後の行 (id = 50) を削除して新しい行を挿入すると、ID が 50 ではなく 51 になるのはなぜですか?
ありがとう。
テーブルがあるとします。最初の列は ID です。自動的に一つ一つ価値が生まれてくると思いました。この列があるとします
1
2
3
4
...
47
48
49
50
最後の行 (id = 50) を削除して新しい行を挿入すると、ID が 50 ではなく 51 になるのはなぜですか?
ありがとう。
行が存在するかどうかにかかわらず、値は使い果たされます。削除に加えて、挿入がロールバックされたときにもギャップが発生します。整数の連続したシーケンスが必要な場合、アイデンティティは答えではありません。
ギャップを調整することは非常に悪い考えです。正しく行わないと、データの整合性の問題が発生する可能性が高くなります。すべてのアプリケーションの99.99%にギャップがあることを気にする理由はありません(ギャップを許可しない法的要件を持つアプリケーションがいくつかあります-それらはIDを使用しません)。
ID シードは削除の影響を受けないため、次の値は行が削除されなかったかのように増加し続けます。
DBCC CHECKIDENT
ID は、 (http://msdn.microsoft.com/en-us/library/ms176057.aspx) ユーティリティを使用して再シードすることもできます。
シードはレコードとは別に追跡されます。レコードを削除しても、値は引き続き使用されます。使用できます
DBCC CHECKIDENT (YourTable, NORESEED)
次の ID 値がどうなるかを確認します。