Изменение свойств последовательности


izmenenie-svojstv-posledovatelnosti_1.gif

Любое свойство существующей последовательности можно изменить с помощью команды ALTER, за исключением типа данных последовательности. Для изменения типа данных последовательности необходимо удалить или

создать ее заново. Чтобы изменить свойства существующей последовательности, применяются те же ключевые слова, что в команде CREATE SEQUENCE, только вместо свойства START WITH в команде CREATE SEQUENCE используется свойство RESTART WITH в команде ALTER SEQUENCE. Например, чтобы изменить Seql для перезапуска со значением -2147483648 и циклическим повтором, задействуйте следующий программный код:

ALTER SEQUENCE dbo.Seql RESTART WITH -214748 3 6 48 CYCLE;

Чтобы начать со значения 1 и отменить циклический повтор:

ALTER SEQUENCE dbo.Seql RESTART WITH 1 NO CYCLE;

Обратите внимание, что SQL Server не позволяет применять заведомо неверные изменения. Например, текущее значение последовательности Seql равно 1. Попытка изменить минимальное значение последовательности на величину, превышающую 1, без изменения текущего значения последовательности завершится неудачей. Чтобы убедиться в этом,попробуйте запустить программный код:

ALTER SEQUENCE dbo.Seql MINVALUE 100;

Вы получите сообщение об ошибке, показанное на экране 1.

Чтобы заменить минимальное значение на 100, необходимо также заменить текущее значение таким, которое находится в допустимом диапазоне:

ALTER SEQUENCE dbo.Seql RESTART WITH 100 MINVALUE 100;

После выполнения программного кода выясняется, что значения вТ1. coll — 1, 2, 3, 7, 8 и 9. Изменение текущих значений последовательности, выполненное второй вставкой, не отменено, хотя выполнена отмена транзакции. Это значит, что нельзя полагаться на последовательности в случаях, когда недопустимы пропуски (например, в номерах счетов-фактур), так же как нельзя полагаться и на IDENTITY. Если нужна последовательность без пропусков, необходимо реализовать собственное решение. Например, можно отслеживать последнее использованное значение в таблице, и каждый раз, когда требуется новое значение, увеличивать существующее с помощью инструкции UPDATE и извлекать его. Такое решение принесет блокирующую последовательность. По очевидным причинам производительность будет ниже, чем у объекта последовательности, но зато пропуски гарантированно отсутствуют.

Последовательности или IDENTITY?

У последовательностей много преимуществ по сравнению со свойством столбца IDENTITY. Я уже рассказал об основных принципах, изменении свойств последовательностей, работе с последовательностями и использовании последовательностей в транзакциях. Далее речь пойдет о кэшировании, получении диапазонов значений последовательностей и особых случаях, когда нужно сформировать несколько значений последовательности для одного целевого ряда. Сводка различий между IDENTITY и последовательностями.

Комментарии