web-dev-qa-db-ja.com

行を削除した後にID値を再利用する

SQL Server 2008 Expressで行を削除した後、IDフィールドの値を再利用することはできますか?これが例です。主キー(ID)としてIdフィールドを持つテーブルがあるとします。 5つの行を追加すると、次の5つのIDがあります:1、2、3、4、5。これらの行を削除してからさらに5つ追加すると、新しい行のIDは6、7、8になります。 9、10。1からやり直すことはできますか?

これを行うには、別のテーブルからデータを削除する必要がありますか?ご協力いただきありがとうございます。

14
Jeremy

以下を使用して、IDENTITY値を設定できます。

DBCC CHECKIDENT (orders, RESEED, 999)

つまり、すべてのDELETEに基づいてステートメントを実行する必要があります。それはなぜこれが悪い考えであるかを強調し始めるはずです...

データベースはシーケンシャル値を気にしません-それはプレゼンテーション専用です。

21
OMG Ponies

all行を削除した後にIDをリセットする場合は、次のいずれかを実行します

--instead of delete, resets identity value
TRUNCATE TABLE orders

--or if TRUNCATE fails because of FKs, use this after DELETE
DBCC CHECKIDENT (orders, RESEED, 1)

それ以外の場合、内部値はギャップの有無に関係なく重要です。

9
gbn

identityフィールドは、デフォルトでは古い値を再利用しません。 dbcc checkident ただし、テーブルにまだ存在する値を下回って再シードするとキー違反が発生するため、これはお勧めしません。一般に、PK値が何であるかを気にする必要はありません。それらが隣接していないという事実は何も傷つけません。

6
Donnie