web-dev-qa-db-ja.com

SQLサーバーID列の値は1ではなく0から始まります

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

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

DBCC CHECKIDENT (SyncSession, reseed, 0);

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

ポインタはありますか?

(SQL Server Express 2005とAdvanced Servicesを使用しています)

38
Muxa

DBCC CHECKIDENT から

DBCC CHECKIDENT ( table_name, RESEED, new_reseed_value )

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

そのため、これは空のテーブルまたは切り捨てられたテーブルに対して予想されます。

44
gbn

再シード値を渡すと、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'
_

これは通常、テーブルを初期の作成状態に近づけるため、より適切な方法です。

4
Keith

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

2
Larry

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

DBCC CHECKIDENT (SyncSession, reseed, 1)

iD列を再シードし、最初の新しいレコードが1で始まることを確認します。

2

これを試して

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 
1
Tanveer