Zurücksetzen einer SQL Server 2012-Sequenz


13

Ich bin dabei, eine bestimmte Tabelle zu testen und zu füllen, die das SEQUENCEObjekt nutzt . In diesem Prozess teste ich das Auffüllen der Tabelle mit Zehntausenden von Einfügezeilen (da ich mit der Programmierung nicht vertraut bin). Das Problem, das ich bei dieser speziellen Tabelle sehe, ist, dass beim Starten eines weiteren Populationstests der SEQUENCEWert nicht auf die erste von mir gewünschte Zahl (1) zurückgesetzt wird.

Wenn ich einen neuen Test wiederholen möchte, lösche ich die betreffende Tabelle und führe dann Folgendes aus:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

Wenn ich will wieder führen Sie den Test habe ich die folgenden ausführen SCHEMAund SEQUENCEBefehle, die unten in der Reihenfolge gezündet werden:

CREATE SCHEMA foo;
GO

CREATE SEQUENCE foo.fee
START WITH 1
INCREMENT BY 1
NO CYCLE
NO CACHE;

GO

Ich erstelle dann die Tabelle:

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

Sobald dies abgeschlossen ist, führe ich den folgenden Befehl 50.000 Mal aus:

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'
)

Jetzt gibt es absolut kein Problem mit den Daten, die in die Tabelle eingegeben werden. Die Herausforderung, der ich begegne, besteht darin, dass ich beim Löschen der Tabelle das Schema und die Sequenz lösche und dann die Tabelle, Sequenz und das Schema neu erstelle, die SEQUENCEvon der letzten Nummer in der vorherigen Datenbankinkarnation übernommen und nicht auf eins zurückgesetzt wurden.

Wenn die letzte Nummer in der Sequenz beispielsweise 634.534 lautet, lautet die nächste Folgenummer in der neuen Tabelle 634.535.

Nach dem Löschen der Tabelle und Löschen des Schemas und der Sequenz führe ich Folgendes aus, um das Entfernen der Sequenz und des Schemas zu überprüfen:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO

Ich bin ratlos, warum das passiert. Gibt es einen anderen Befehl, den ich hier vermisse, der mir helfen würde zu lokalisieren, was genau hier vor sich geht?

Ich sollte beachten, dass diese Tabelle zu einer Datenbank mit 7 anderen Tabellen gehört, die alle den SEQUENCEBefehl korrekt ausführen.

Dies ist eine SQL 2012 SP1 Enterprise Edition-Installation.

Antworten:



5

Verwenden Sie Ihr Skript mit ein paar geringfügigen Änderungen:

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
SET NOCOUNT ON
GO
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')
GO 50000
SELECT
    MIN(order_number), 
    MAX(order_number)
FROM foo.sample_table_with_data AS stwd
GO
DROP SEQUENCE foo.fee;
GO
DROP TABLE foo.sample_table_with_data
GO
DROP SCHEMA foo;

... Ich kann das Problem in SQL Server 2012 SP1 (Build 3000) oder höher nicht reproduzieren.

Ich kann auch kein Connect-Element oder KB-Artikel finden, in dem dieses spezielle Szenario erwähnt wird (und es gab viele andere SEQUENCEProbleme). Das heißt nicht, dass es vor SP1 nicht gab, da nicht alle Korrekturen dokumentiert werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.