Скидання послідовності SQL Server 2012


13

Я перебуваю в процесі тестування та заповнення конкретної таблиці, яка використовує SEQUENCEоб'єкт. У цьому процесі я тестую заповнення таблиці десятками тисяч рядків вставки (оскільки мені невідомо, як це програмувати). Проблема, яку я бачу з цією конкретною таблицею, полягає в тому, що коли я запускаю черговий тест сукупності, показник SEQUENCEне повертається до першого числа, яке я хочу (а це 1).

Коли я хочу повторно запустити новий тест, я видаляю відповідну таблицю, після чого виконайте наступне:

DROP SEQUENCE foo.fee;
GO

DROP SCHEMA foo;
GO

Коли я хочу повторно запустити тест, я запускаю наступні SCHEMA& SEQUENCEкоманди, які запускаються у порядку нижче:

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 Enterprise Edition.

Відповіді:



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, оскільки не всі виправлення закінчуються документально.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.