4

SQL Sever (2008 Express) が自動インクリメント ID 仕様を挿入しているときにランダムにジャンプしていることに気付きました。

たとえば、私の列の1つ「HitStat_ID」は、15、16、17、18を順番に挿入し、突然、1012、1013、1014などにジャンプすることを決定します....その後、9120、9121など.

それらが一意である限り(それらが一意である限り)、実際には問題ではありませんが、なぜこれを行うのでしょうか? それも複数のテーブルで行っています。奇妙なことに、これは先週かそこらでしか行われていませんが、アプリケーションは何ヶ月も開発されています!

私は ASP.NET VB で作業しています。

これは挿入です(この場合):

sql = "INSERT INTO [HitStats] ([PageName], [Date_and_Time], [User_ID]) values ('Home',     
'" + TheDateTime + "', '" + Session("User_ID") + "')"
Dim dbcmd As SqlCommand = New SqlCommand(sql, dbconn)
dbcmd.ExecuteNonQuery()
dbcmd.Dispose()

SQL インジェクションについてこれ以上話さないでください。それは起こりません。

4

4 に答える 4

5

アプリケーションとトランザクションを使用している場合、トランザクションをロールバックすると、生成された自動インクリメント番号が失われます。また、いくつかの挿入を行い、それらをロールバックする場合。

詳細はこちら

また、データを削除すると、再シードを行わない限り、生成された数値を再び取得することはできません。こちらをご覧ください

于 2012-08-22T13:50:49.320 に答える
0

データベースが複製され、自動 ID 範囲管理が使用されている場合、このようなギャップは珍しくありません。

ID 値のブロックが複製に関係する各サーバーに渡されるため、他のサーバーと通信することなく ID 値を渡すことができます。サーバーでブロックが使い果たされると、それに割り当てられた次のブロックに「ジャンプ」します。これは、より高い範囲の値になる可能性があります。

于 2012-08-22T13:52:05.163 に答える
0

「失敗した挿入」に関する@ElVieejoの+1。別の可能性として、誰かまたは何かが特定の値を追加している可能性があります ( SET IDENTITY_INSERT ON) -- これが大きなギャップを説明している可能性があります。

于 2012-08-22T13:53:18.720 に答える