0

テーブルがあるとします。最初の列は ID です。自動的に一つ一つ価値が生まれてくると思いました。この列があるとします

1 
2
3
4
...
47
48
49
50

最後の行 (id = 50) を削除して新しい行を挿入すると、ID が 50 ではなく 51 になるのはなぜですか?

ありがとう。

4

4 に答える 4

1

行が存在するかどうかにかかわらず、値は使い果たされます。削除に加えて、挿入がロールバックされたときにもギャップが発生します。整数の連続したシーケンスが必要な場合、アイデンティティは答えではありません。

于 2012-06-29T17:37:31.690 に答える
0

ギャップを調整することは非常に悪い考えです。正しく行わないと、データの整合性の問題が発生する可能性が高くなります。すべてのアプリケーションの99.99%にギャップがあることを気にする理由はありません(ギャップを許可しない法的要件を持つアプリケーションがいくつかあります-それらはIDを使用しません)。

于 2012-06-29T20:13:57.373 に答える
0

ID シードは削除の影響を受けないため、次の値は行が削除されなかったかのように増加し続けます。

DBCC CHECKIDENTID は、 (http://msdn.microsoft.com/en-us/library/ms176057.aspx) ユーティリティを使用して再シードすることもできます。

于 2012-06-29T17:35:11.877 に答える
0

シードはレコードとは別に追跡されます。レコードを削除しても、値は引き続き使用されます。使用できます

DBCC CHECKIDENT (YourTable, NORESEED)

次の ID 値がどうなるかを確認します。

于 2012-06-29T17:37:52.410 に答える