重置 SQL Server 2012 序列

Tec*_*Joe 14 sql-server sequence sql-server-2012

我正在测试和填充利用该SEQUENCE对象的特定表。在这个过程中,我正在测试用数以万计的插入行填充表(因为我不熟悉如何编程)。我在这个特定表格中看到的问题是,当我开始另一个人口测试时,SEQUENCE它不会重置回我想要的第一个数字(即 1)。

当我想重新运行一个新的测试时,我删除了有问题的表,然后运行以下命令:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO
Run Code Online (Sandbox Code Playgroud)

当我想重新运行测试时,我运行以下SCHEMA&SEQUENCE命令,这些命令按以下顺序触发:

CREATE SCHEMA foo;
GO

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

GO
Run Code Online (Sandbox Code Playgroud)

然后我创建表:

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
Run Code Online (Sandbox Code Playgroud)

完成后,我运行以下插入命令 50,000 次:

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'
)
Run Code Online (Sandbox Code Playgroud)

现在进入表格的数据绝对没有问题。我遇到的挑战是,当我删除表时,删除模式和序列,然后重新创建表、序列和模式SEQUENCE,它们从前一个数据库化身中的最后一个数字中选取,而不是重置回一个。

例如,如果序列中的最后一个数字是 634,534,则新表中的下一个序列号是 634,535。

删除表并删除模式和序列后,我运行以下命令以验证序列和模式的删除:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO
Run Code Online (Sandbox Code Playgroud)

我很难过为什么会发生这种情况。有没有我在这里遗漏的另一个命令可以帮助我本地化这里到底发生了什么?

我应该注意到这个表属于一个数据库,其他 7 个表都SEQUENCE正确运行了命令。

这是 SQL 2012 SP1 企业版安装。

Pau*_*ite 5

使用您的脚本进行一些细微的更改:

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;
Run Code Online (Sandbox Code Playgroud)

...我无法在 SQL Server 2012 SP1 (build 3000) 或更高版本上重现该问题。

我也找不到提及此特定场景的 Connect 项目或 KB 文章(并且还有很多其他SEQUENCE问题)。这并不是说它在 SP1 之前不存在,因为并非所有修复都最终被记录在案。