Redefinindo uma sequência do SQL Server 2012

13

Estou no processo de testar e preencher uma tabela específica que aproveita o SEQUENCEobjeto. Nesse processo, estou testando preencher a tabela com dezenas de milhares de linhas de inserção (como não estou familiarizado com como programar isso). O problema que estou vendo com esta tabela específica é que, quando inicio outro teste de população, SEQUENCEele não é redefinido para o primeiro número que eu quero (que é 1).

Quando desejo executar novamente um novo teste, excluo a tabela em questão e execute o seguinte:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

Quando quero executar novamente o teste, execute os seguintes comandos SCHEMA& SEQUENCE, que são disparados na ordem abaixo:

CREATE SCHEMA foo;
GO

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

GO

Eu então crio a tabela:

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

Uma vez concluído, eu executo o seguinte comando de inserção 50.000 vezes:

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

Agora não há absolutamente nenhum problema com os dados inseridos na tabela. O desafio que encontro é que, quando excluo a tabela, descarto o esquema e a sequência e, em seguida, recriamos a tabela, a sequência e o esquema, que são SEQUENCEcapturados no último número da encarnação anterior do banco de dados e não redefinimos para um.

Por exemplo, se o último número na sequência for dizer 634.534, o próximo número de sequência na nova tabela é 634.535.

Após excluir a tabela e soltar o esquema e a sequência, executei o seguinte para verificar a remoção da sequência e do esquema:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO

Estou perplexo quanto ao por que isso está acontecendo. Existe outro comando que estou faltando aqui que me ajudaria a localizar o que exatamente está acontecendo aqui?

Devo observar que esta tabela pertence a um banco de dados com 7 outras tabelas, todas executando o SEQUENCE comando corretamente.

Esta é uma instalação do SQL 2012 SP1 Enterprise Edition.

Techie Joe
fonte

Respostas:

5

Usando seu script com algumas pequenas alterações:

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;

... Não consigo reproduzir o problema no SQL Server 2012 SP1 (compilação 3000) ou superior.

Também não consigo encontrar um item do Connect ou um artigo da KB mencionando esse cenário específico (e houve muitos outros SEQUENCEproblemas). Isso não quer dizer que não existia antes do SP1, porque nem todas as correções acabam sendo documentadas.

Paul White 9
fonte