Jestem w trakcie testowania i wypełniania określonej tabeli, która wykorzystuje SEQUENCE
obiekt. W tym procesie testuję zapełnianie tabeli dziesiątkami tysięcy linii wstawiania (ponieważ nie jestem zaznajomiony z tym, jak to programować). Problem, który widzę w tej konkretnej tabeli, polega na tym, że kiedy rozpoczynam kolejny test populacji, SEQUENCE
nie resetuje się z powrotem do pierwszego numeru, który chcę (czyli 1).
Kiedy chcę ponownie uruchomić nowy test, usuwam przedmiotową tabelę, a następnie uruchamiam następujące czynności:
DROP SEQUENCE foo.fee;
GO
DROP SCHEMA foo;
GO
Kiedy chcę ponownie uruchomić test, uruchamiam następujące polecenia SCHEMA
i SEQUENCE
polecenia, które są uruchamiane w następującej kolejności:
CREATE SCHEMA foo;
GO
CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;
GO
Następnie tworzę tabelę:
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
Po zakończeniu uruchomię następujące polecenie wstawiania 50 000 razy:
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'
)
Teraz absolutnie nie ma problemu z wprowadzaniem danych do tabeli. Wyzwanie, z którym się spotykam, polega na tym, że kiedy usuwam tabelę, upuszczam schemat i sekwencję, a następnie ponownie tworzę tabelę, sekwencję i schemat, który SEQUENCE
odbiera od ostatniego numeru w poprzednim wcieleniu bazy danych i nie resetuje z powrotem do jednego.
Na przykład, jeśli ostatnią liczbą w sekwencji jest powiedzmy 634 534, następnym numerem sekwencji w nowej tabeli jest 634 535.
Po usunięciu tabeli i upuszczeniu schematu i sekwencji wykonuję następujące czynności, aby sprawdzić usunięcie sekwencji i schematu:
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO
SELECT * FROM sys.sequences
GO
Jestem zaskoczony, dlaczego tak się dzieje. Czy brakuje mi tutaj innego polecenia, które pomogłoby mi zlokalizować, co dokładnie się tutaj dzieje?
Powinienem zauważyć, że ta tabela należy do bazy danych z 7 innymi tabelami, w których SEQUENCE
poprawnie uruchomiono polecenie.
Jest to instalacja SQL 2012 SP1 Enterprise Edition.
źródło