-1

ID が int 自動インクリメントであるテーブルがデータベースにあります。ndu エントリを作成すると、すべてがうまくいき、id が 1 増加します。

しかし、今日、私は大きな穴を見ました。レコードの 1 つは id=56 で、次のレコードは id=1055 です。

何が原因でしょうか。このデータベースでバックアップを作成しませんでした。

4

2 に答える 2

0

これにはいくつかの原因が考えられます

  1. 誰かが実行してテーブルを再シードしましたDBCC CHECKIDENT
  2. 誰かが一連の行を挿入して削除しました
  3. 行のバッチを挿入しようとした、バッチが失敗した、すべてがロールバックされた、SQL Server は ID 値を再利用しない

また、ステートメントですべての行を削除した場合、シードは 1 にリセットされないことに注意してくださいDELETETRUNCATE

于 2013-04-11T13:33:17.847 に答える
0

ほとんどの場合、挿入またはトランザクションのロールバックでエラーが発生した可能性があります。テーブルの ID 値はトランザクションの影響を受けません。たとえば、テーブルに値を挿入してトランザクションをロールバックしても、indentity 値は「増加したまま」になります。説明する短い例:

create table _test (
    id int identity (1,1)
    ,txt varchar(2)
)
insert into _test(txt)
select 'aa' as txt

insert into _test(txt)
select 'bb' as txt union all 
select 'ccc'

GO

insert into _test(txt)
select 'dd' as txt


select * from _test
于 2013-04-11T13:38:33.707 に答える