0

一般的な質問です。どのテーブルにも接続されていない IDENTITY PK を持つテーブルがあります。テーブルには別の唯一の FK があります。

ある条件で、そのテーブルに対して DELETE コマンドを実行します。

自動挿入された次の PK ID を使用して、新しいレコードをテーブルに INSERT できます。

しかし、PK で ID 番号を再利用することはありません。

次のようなものを実行すると

DECLARE @max_PKid BIGINT;
SET @max_PKid = (SELECT ISNULL(MAX(PKid), 0) FROM Table WHERE FKid=@somevalue);
DBCC CHECKIDENT ('Table', reseed, @max_PKid)

DELETE の直後、次の INSERT でアクセス違反の問題が発生します。

質問 1: 一般に、DBCC CHECKIDENT を使用せずに DELETE/INSERT を実行した後、テーブル内の順序付けされていない (たとえば、シードされていない) PKid に間隔を空けることは良い習慣ですか? 私はそれらを気にする必要がありますか?

質問 2: そうでない場合、どうすればよいですか?

4

1 に答える 1

1

いいえ、心配する必要はありません。IDENTITY 範囲に「穴」ができる状況は他にもあります。たとえば、トランザクションを開始し、テーブルに 100,000 行を挿入してから、そのトランザクションをロールバックすると、これらの IDENTITY 値は失われます。これは気にする必要はありません。

于 2012-12-13T09:56:34.917 に答える