2

プライマリ整数キー値とその自動インクリメントを1つずつ持つテーブルがあります。内部の値は116までうまくいきましたが、しばらくすると突然10085値から続きます..

理由はわかりませんが、データベースを縮小したのかもしれません。とにかく、DBCC CHECKIDENT コマンドについては知っています。

私の質問は、私が実行DBCC CHECKIDENT (mytable, RESEED, 116)した場合、将来 100085 からの ID を持つ行に害がありますか? ある日、行が 100084 に達すると、SQL サーバーは他の Id からジャンプするか、重複した Id を挿入するために例外をスローしますか?

4

2 に答える 2

2

これをしないでください

ID 列が 100084 になると、重複キーの例外がスローされます。

衝突を避けるために、以前に生成された値を魔法のようにスキップすることはありません。以下から簡単に見ることができます

CREATE TABLE mytable
  (
     x INT IDENTITY PRIMARY KEY,
     Y INT
  )

INSERT INTO mytable
            (Y)
SELECT TOP (200) number
FROM   master..spt_values

DELETE FROM mytable
WHERE  x BETWEEN 1 AND 150;

DBCC CHECKIDENT (mytable, RESEED, 1)

/*Works OK*/
INSERT INTO mytable
            (Y)
SELECT TOP (149) number
FROM   master..spt_values

/*Error*/
INSERT INTO mytable
            (Y)
SELECT TOP (10) number
FROM   master..spt_values 

メッセージ 2627、レベル 14、状態 1、行 25 PRIMARY KEY 制約 'PK__mytable__3BD019E5518439DD' の違反。オブジェクト 'dbo.mytable' に重複するキーを挿入できません。重複キーの値は (151) です。ステートメントは終了されました。

于 2016-10-29T18:56:05.210 に答える