データベースをリセットするSQLスクリプトを作成しています。これを行うには、いくつかの(すべてではない)テーブルを空にして、それらのID値を0にリセットします。
一部のテーブルではを使用TRUNCATE TABLE
していますが、テーブルが外部キー制約によって参照されている場合、これは機能しません。それらのテーブルにはを使用しますDBCC CHECKIDENT(TableName, RESEED, 0)
。これはほとんどのテーブルで機能しますが、すべてでは機能しません。テーブルにデータがない場合、現在のID値は0ではなくNULLになります。
CREATE TABLE TableName (Id int identity, Value varchar(10))
DBCC CHECKIDENT(TableName)
-- Checking identity information: current identity value 'NULL', current column value 'NULL'.
それらを使用するDBCC CHECKIDENT(TableName, RESEED, 0)
と、次のID値として0になります。代わりに1を再シード値として使用できますが、データが含まれているテーブルは2から始まります。
sys-viewのいずれかで次のID値を見つけることは可能ですか?次の値を変数に入れることができれば、それを使用して次の値を0または1に設定できます。試してみましIDENT_CURRENT('TableName')
たが、次の値としてNULLと0の両方に対して1と表示されます。
また、「なぜすべてを1から始める必要があるのか」などの質問や、私が求めているものとは別の結果を示唆する質問は避けてください。