it-swarm-eu.dev

Resetování sekvence serveru SQL Server 2012

Jsem v procesu testování a naplnění konkrétní tabulky, která využívá objekt SEQUENCE. V tomto procesu testuji naplnění tabulky desítkami tisíc řádků vložení (protože neznám, jak to programovat). Problém, který vidím v této konkrétní tabulce, spočívá v tom, že při spuštění dalšího testu populace se parametr SEQUENCE neobnoví zpět na první požadované číslo (což je 1).

Když chci znovu spustit nový test, smažu dotyčnou tabulku a poté spustím následující:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

Když chci znovu spustit test, spustím následující příkazy SCHEMA & SEQUENCE, které jsou spuštěny v následujícím pořadí:

CREATE SCHEMA foo;
GO

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

GO

Poté vytvořím tabulku:

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

Jakmile je to dokončeno, spustím následující příkaz insert 50 000krát:

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

Nyní není absolutně žádný problém s daty vstupujícími do tabulky. Výzva, se kterou se setkávám, je, že když odstraním tabulku, zruším schéma a posloupnost a znovu vytvořím tabulku, posloupnost a schéma SEQUENCE vyzvedne z posledního čísla v předchozí inkarnaci databáze a ne resetovat zpět na jeden.

Například, pokud poslední číslo v sekvenci je 634 534, další číslo sekvence v nové tabulce je 634 535.

Po odstranění tabulky a vynechání schématu a sekvence spustím následující, abych ověřil odstranění sekvence a schématu:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO

Jsem zaražený, proč se to děje. Chybí mi tu další příkaz, který by mi pomohl lokalizovat, co se přesně tady děje?

Měl bych poznamenat, že tato tabulka patří do databáze se 7 dalšími tabulkami, z nichž všechny správně spouštějí příkaz SEQUENCE.

Toto je instalace SQL 2012 SP1 Enterprise Edition.

13
Techie Joe

Snaž se

ALTER SEQUENCE foo.fee
RESTART

Nebo:

ALTER SEQUENCE foo.fee
RESTART WITH 1

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

15
Bacon Bits

Pomocí skriptu s několika malými změnami:

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;

... Nemohu reprodukovat problém na serveru SQL Server 2012 SP1 (build 3000) nebo výše.

Nemohu najít ani položku Connect ani článek KB, který by zmiňoval tento konkrétní scénář (a spousta dalších problémů SEQUENCE). To neznamená, že neexistoval pre-SP1, protože ne všechny opravy jsou zdokumentovány.

5
Paul White 9