私は、SEQUENCE
オブジェクトを活用する特定のテーブルをテストし、データを取り込むプロセスにいます。このプロセスでは、何万もの挿入行をテーブルに追加するテストを行っています(これをプログラムする方法に慣れていないため)。この特定のテーブルで見られる問題は、別の母集団テストを開始したときに、SEQUENCE
希望する最初の数値(1)にリセットされないことです。
新しいテストを再実行する場合は、問題のテーブルを削除してから次を実行します。
DROP SEQUENCE foo.fee;
GO
DROP SCHEMA foo;
GO
テストを再実行する場合、次のSCHEMA
&SEQUENCE
コマンドを実行します。これらのコマンドは、以下の順序で実行されます。
CREATE SCHEMA foo;
GO
CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;
GO
次に、テーブルを作成します。
CREATE TABLE foo.sample_table_with_data
(order_number bigint PRIMARY KEY NOT NULL,
sample_column_one nvarchar(max) NULL,
sample_column_two nvarchar(max) NULL,
sample_column_three nvarchar(max) NULL)
GO
それが完了したら、次の挿入コマンドを50,000回実行します。
INSERT INTO [foo].[sample_table_with_data]
(
[order_number],
[sample_column_one],
[sample_column_two],
[sample_column_three]
)
VALUES
(
NEXT VALUE FOR foo.fee,
'Blah',
'Blah Blah',
'Blah Blah Blah'
)
これで、テーブルに入力するデータにまったく問題はありません。私が直面している課題は、テーブルを削除し、スキーマとシーケンスを削除してから、テーブル、シーケンス、スキーマを再作成SEQUENCE
し、以前のデータベース化の最後の番号からピックアップし、1にリセットしないことです。
たとえば、シーケンスの最後の番号が634,534である場合、新しいテーブルの次のシーケンス番号は634,535です。
テーブルを削除し、スキーマとシーケンスを削除した後、次を実行してシーケンスとスキーマが削除されたことを確認します。
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO
SELECT * FROM sys.sequences
GO
私はこれがなぜ起こっているのか困惑しています。ここで何が起こっているのかを正確にローカライズするのに役立つ別のコマンドがここにありませんか?
このテーブルは、他の7つのテーブルがすべてSEQUENCE
コマンドを正しく実行しているデータベースに属していることに注意してください。
これは、SQL 2012 SP1 Enterprise Editionのインストールです。