48

TABLE CREATE に IDENTITY(1,1) があるにもかかわらず、データベース内のいくつかのテーブルの ID が 0 から始まるという奇妙な状況があります。これは一部のテーブルには当てはまりますが、他のテーブルには当てはまりません。それは今日まで働いています。

ID列をリセットしようとしました:

DBCC CHECKIDENT (SyncSession, reseed, 0);

しかし、新しいレコードは 0 から始まります。すべてのテーブルでこれを試してみましたが、まだ 0 から始まるものと 1 から始まるものがあります。

ポインタはありますか?

(高度なサービスを備えた SQL Server Express 2005 を使用しています)

4

7 に答える 7

53

DBCCCHECKIDENTから

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

テーブルが作成されてから行が挿入されていない場合、またはTRUNCATE TABLEステートメントを使用してすべての行が削除されている場合、DBCCCHECKIDENTの実行後に挿入される最初の行はnew_reseed_valueをIDとして使用します。それ以外の場合、挿入される次の行はnew_reseed_value+現在の増分値を使用します。

したがって、これは空のテーブルまたは切り捨てられたテーブルで予期されます。

于 2009-04-07T08:49:22.750 に答える
7

reseed 値を渡すと、DB はその新しい値から ID を開始します。

DBCC CHECKIDENT (SyncSession, RESEED, 0); --next record should be 0 + increment

ただし、値を渡す必要はありません。渡さない場合は、IDENTITY(a,b)代わりに使用されます。

DBCC CHECKIDENT (SyncSession, RESEED); --next record should be the seed value 'a'

これは、テーブルを最初に作成された状態に近づけるため、通常はより良い方法です。

于 2014-03-05T14:07:58.693 に答える
3

ID値をゼロに変更(再シード)したため、これは論理的ですか?

DBCC CHECKIDENT (SyncSession, reseed, 1)

ID 列を再シードし、最初の新しいレコードが 1 から始まるようにします。

于 2009-04-07T08:43:46.867 に答える
2

DBを変更した後、バックアップから復元するという同じ問題があります。ダミーレコードを追加してから削除します...次にRESEEDを0に設定します。動作しているようです。

于 2010-09-30T15:01:10.233 に答える
1

これを試して

DECLARE @c TABLE (TanvtechId varchar(10),NewTanvtechId Varchar(10))
INSERT INTO @c
SELECT TanvtechId , Row_Number() OVER (ORDER BY TanvtechId ) from Tanvtech 

UPDATE G
SET G.TanvtechId =a.NewTanvtechId 
FROM Tanvtech as G INNER JOIN @c as a ON a.TanvtechId =G.TanvtechId 
于 2011-06-20T14:20:58.177 に答える
-1
DBCC CHECKIDENT ( Table_Name, RESEED, 0 )

これは、 で開始idZero(0)、テーブルからすべての行を削除して、データを再びテーブルに戻す方法です。

于 2016-05-26T07:12:36.900 に答える