it-swarm.com.de

Zurücksetzen einer SQL Server 2012-Sequenz

Ich bin dabei, eine bestimmte Tabelle zu testen und zu füllen, die das Objekt SEQUENCE 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 das SEQUENCE nicht auf die erste gewünschte Zahl zurückgesetzt wird (dh 1).

Wenn ich einen neuen Test erneut ausführen 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 den Test erneut ausführen möchte, führe ich die folgenden Befehle SCHEMA & SEQUENCE aus, die in der folgenden Reihenfolge ausgelöst 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 Einfügebefehl 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 besteht darin, dass ich beim Löschen der Tabelle das Schema und die Sequenz lösche und dann die Tabelle, die Sequenz und das Schema neu erstelle, die SEQUENCE von der letzten Nummer in der vorherigen Datenbankinkarnation aufnimmt und nicht zurück auf eins zurücksetzen.

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

Nachdem ich die Tabelle gelöscht und das Schema und die Sequenz gelöscht habe, 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 darüber, warum dies geschieht. Gibt es einen anderen Befehl, den ich hier vermisse, um 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 Befehl SEQUENCE korrekt ausführen.

Dies ist eine SQL 2012 SP1 Enterprise Edition-Installation.

13
Techie Joe

Versuchen

ALTER SEQUENCE foo.fee
RESTART

Oder:

ALTER SEQUENCE foo.fee
RESTART WITH 1

http://msdn.Microsoft.com/en-us/library/ff878572.aspx

15
Bacon Bits

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 unter 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 SEQUENCE -Probleme). Das heißt nicht, dass es vor SP1 nicht existierte, da nicht alle Korrekturen dokumentiert werden.

5
Paul White 9