重置SQL Server 2012序列


13

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

当我希望重新运行新测试时,请删除有问题的表,然后运行以下命令:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

当我想重新运行测试时,我运行以下SCHEMASEQUENCE命令,它们按以下顺序触发:

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

一旦完成,我将运行以下插入命令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'
)

现在,将数据输入到表中绝对没有问题。我遇到的挑战是,当我删除表时,删除架构和序列,然后重新创建表,序列和架构SEQUENCE,从上一个数据库化身中的最后一个数字中拾取数据,而不重置为一个。

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

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

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA
GO

SELECT * FROM sys.sequences
GO

我为此而感到困惑。我在这里还缺少另一个命令,可以帮助我本地化这里发生的事情吗?

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

这是SQL 2012 SP1企业版安装。

Answers:



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;

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.