Поделиться через


ПОСЛЕДОВАТЕЛЬНОСТЬ ALTER (Transact-SQL)

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

Изменяет аргументы существующего объекта последовательности. Если последовательность была создана с параметром CACHE , изменение последовательности повторно создает кэш.

Объекты последовательностей создаются с помощью инструкции CREATE SEQUENCE. Последовательность — это целочисленное значение, она может иметь любой тип данных, возвращающий целое число. Тип данных нельзя изменить с помощью инструкции ALTER SEQUENCE . Чтобы изменить тип данных, удалите и заново создайте объект последовательности.

Последовательность представляет собой определяемый пользователем объект, привязанный к схеме, который формирует последовательность числовых значений в соответствии со спецификацией. Новые значения создаются из последовательности путем вызова NEXT VALUE FOR функции. Используется sp_sequence_get_range для одновременного получения нескольких порядковых номеров. Сведения и сценарии, использующие оба CREATE SEQUENCEпараметра sp_sequence_get_range, и функцию NEXT VALUE FOR , см. в разделе "Порядковые номера".

Соглашения о синтаксисе Transact-SQL

Синтаксис

ALTER SEQUENCE [ schema_name. ] sequence_name
    [ RESTART [ WITH <constant> ] ]
    [ INCREMENT BY <constant> ]
    [ { MINVALUE <constant> } | { NO MINVALUE } ]
    [ { MAXVALUE <constant> } | { NO MAXVALUE } ]
    [ CYCLE | { NO CYCLE } ]
    [ { CACHE [ <constant> ] } | { NO CACHE } ]
[ ; ]

Аргументы

sequence_name

Указывает уникальное имя, под которым последовательность известна в базе данных. Тип sysname.

ПЕРЕЗАПУСК [ КОНстанта< WITH >]

Следующее значение, возвращаемое объектом последовательности. Если это указано, RESTART WITH значение должно быть целым числом, которое меньше или равно максимальному и большему или равно минимальному значению объекта последовательности. WITH Если значение опущено, нумерование последовательности перезапускается на основе исходных CREATE SEQUENCE параметров.

Константа INCREMENT BY <>

Значение, используемое для увеличения (или уменьшения, если отрицательное) базового значения объекта последовательности для каждого вызова NEXT VALUE FOR функции. Если приращение является отрицательным значением, то объект последовательности убывается, в противном случае он возрастает. Приращение не может быть 0.

[ константы< MINVALUE >| NO MINVALUE ]

Указывает граничные значения для объекта последовательности. Если NO MINVALUE задано, используется минимальное возможное значение типа данных последовательности.

[ константы< MAXVALUE >| NO MAXVALUE ]

Указывает граничные значения для объекта последовательности. Если NO MAXVALUE задано, используется максимально возможное значение типа данных последовательности.

[ ЦИКЛ | НЕТ ЦИКЛА ]

Это свойство указывает, должен ли объект последовательности перезапуститься из минимального значения (или максимума для объектов последовательности убывания) или исключение при превышении минимального или максимального значения.

Примечание.

После велоспорта следующее значение является минимальным или максимальным, а не START VALUE последовательностью.

[ КЭШ [ <константа> ] | НЕТ КЭША ]

Повышает производительность для приложений, использующих объекты последовательностей, сводя к минимуму число операций ввода-вывода, которые требуются для сохранения сформированных значений в системных таблицах.

Дополнительные сведения о поведении кэша см. в разделе CREATE SEQUENCE.

Замечания

Сведения о том, как создаются последовательности и как управляется кэш последовательности, см. в статье CREATE SEQUENCE.

Для MINVALUE последовательностей возрастания и MAXVALUE убывающих последовательностей нельзя изменить на значение, которое не разрешает START WITH значение последовательности. Чтобы изменить MINVALUE по возрастанию последовательность на число, превышающее значение, или изменить START WITH убывающую последовательность на число меньшее, чем MAXVALUESTART WITH значение, добавьте RESTART WITH аргумент для перезапуска последовательности в нужной точке, которая попадает в минимальный и максимальный диапазон.

Метаданные

Чтобы получить сведения о последовательностях, запросите представление sys.sequences.

Разрешения

Требуется ALTER разрешение на последовательность или ALTER разрешение схемы. Чтобы предоставить ALTER разрешение на последовательность, используйте ALTER ON OBJECT следующий формат:

GRANT ALTER
    ON OBJECT::Test.TinySeq TO [AdventureWorks\Larry];

Владение объектом последовательности можно передать с помощью инструкции ALTER AUTHORIZATION .

Audit

Для аудита ALTER SEQUENCEотслеживайте SCHEMA_OBJECT_CHANGE_GROUP.

Примеры

Примеры создания последовательностей и использования NEXT VALUE FOR функции для создания номеров последовательностей см. в разделе "Порядковые номера".

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

В приведенном ниже примере создается схема Test и последовательность TestSeq с типом данных int, имеющим диапазон от 100 до 200. Последовательность начинается со 125 и увеличивается на 25 при каждом создании номера. Так как последовательность настроена на цикл, если значение превышает максимальное значение 200, последовательность перезапускается по минимальному значению 100.

CREATE SCHEMA Test;
GO

CREATE SEQUENCE Test.TestSeq
    AS INT
    START WITH 125
    INCREMENT BY 25
    MINVALUE 100
    MAXVALUE 200
    CYCLE
    CACHE 3;
GO

В приведенном ниже примере последовательность TestSeq изменяется для работы в диапазоне от 50 до 200. Последовательность перезапускает нумерацию рядов со 100 с увеличением на 50 при каждом формировании номера.

ALTER SEQUENCE Test.TestSeq
    RESTART WITH 100
    INCREMENT BY 50
    MINVALUE 50
    MAXVALUE 200
    NO CYCLE
    NO CACHE;
GO

Так как последовательность не циклирует, NEXT VALUE FOR функция приводит к ошибке, если последовательность превышает 200.

B. Перезапуск последовательности

В следующем примере создается последовательность с именем CountBy1. В ней используются значения по умолчанию.

CREATE SEQUENCE Test.CountBy1;

Для формирования значения последовательности ее владелец выполняет следующую инструкцию:

SELECT  NEXT VALUE FOR Test.CountBy1;

Возвращенное значение -9 223 372 036 854 775 808 — это наименьшее возможное значение для типа данных bigint. Владелец понимает, что он хотел начать последовательность с 1, но не указал START WITH предложение при создании последовательности. Чтобы исправить эту ошибку, владелец выполняет следующую инструкцию.

ALTER SEQUENCE Test.CountBy1
    RESTART WITH 1;

Затем он снова выполняет следующую инструкцию для формирования последовательного номера.

SELECT  NEXT VALUE FOR Test.CountBy1;

Это номер 1, как и ожидалось.

Последовательность CountBy1 была создана с помощью значения NO CYCLE по умолчанию, поэтому она перестанет работать после создания номера 9223 372 036 854 775 807. Последующие вызовы объекта последовательности возвращают ошибку 11728. Следующая инструкция включает зацикливание для объекта и устанавливают его кэш в значение 20.

ALTER SEQUENCE Test.CountBy1
    CYCLE
    CACHE 20;

Теперь, когда будет достигнут номер 9 223 372 036 854 775 807, следующим номером будет минимально возможный для этого типа данных — -9 223 372 036 854 775 808.

Владелец понял, что тип данных bigint использует 8 байт при каждом использовании. Типа данных int, занимающего 4 байта, будет достаточно. Однако тип данных объекта последовательности не может быть изменен. Чтобы изменить тип данных на int, он должен удалить объект последовательности и создать его заново с нужным типом данных.