Если вы изменяете последовательность для перезапуска со значением, точно таким же, как ее текущее значение, следующее значение будет тем, которое указано в противоположность текущему значению плюс приращение. Все хорошо, но как движок SQL Server определяет использование текущего значения вместо добавления приращения? Я предполагаю, что где-то есть флаг для обозначения текущего статуса.
Рассматривая представление sys.sequence до и после этой серии событий, я наблюдал только изменения в столбцах modify_date и start_value объектов после оператора ALTER SEQUENCE. Получение значения NEXT VALUE изменяет столбец current_value только после выбора второго значения NEXT VALUE либо из создаваемой последовательности, либо из инструкции ALTER SEQUENCE ... RESTART.
Вот пример для демонстрации (столбец modify_date просто показан как время):
CREATE SEQUENCE abc START WITH 3 INCREMENT BY 2;
modify_date current_value increment start_value
---------------- ------------- ----------- -----------
17:39:57.04 3 2 3
Создана последовательность, а в столбце current_value указано следующее значение, которое будет использоваться в последовательности.
SELECT NEXT VALUE FOR abc; -- 3
SELECT NEXT VALUE FOR abc; -- 5
SELECT NEXT VALUE FOR abc; -- 7
SELECT NEXT VALUE FOR abc; -- 9
modify_date current_value increment start_value
---------------- ------------- ----------- -----------
17:39:57.04 9 2 3
Current_value теперь показывает последнее использованное значение, т.е. следующим значением будет текущее значение плюс приращение.
ALTER SEQUENCE abc RESTART WITH 9;
modify_date current_value increment start_value
---------------- ------------- ----------- -----------
17:40:17.42 9 2 9
Таким образом, дата и начальное значение изменились, и я предполагаю, что где-то был установлен флаг, указывающий, что эта последовательность должна начинаться с текущего значения.
SELECT NEXT VALUE FOR abc; -- 9
modify_date current_value increment start_value
---------------- ------------- ----------- -----------
17:40:17.42 9 2 9
Изменений в представлении sys.sequence не наблюдается.
SELECT NEXT VALUE FOR abc; -- 11
modify_date current_value increment start_value
---------------- ------------- ----------- -----------
17:40:17.42 11 2 9
Последовательность теперь продолжается, как и ожидалось, с изменением только current_value в представлении.
Так кто-нибудь знает, верна ли моя теория флагов, и, если она есть, где находится этот флаг (т. Е. Находится ли он в доступном системном представлении).