Compartir a través de


ALTER SECUENCIA (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseInstancia administrada de Azure SQLBase de datos SQL en Microsoft Fabric

Modifica los argumentos de un objeto de secuencia existente. Si la secuencia se creó con la CACHE opción , al modificar la secuencia se vuelve a crear la memoria caché.

Los objetos de secuencia se crean con la instrucción CREATE SEQUENCE. Las secuencias son valores enteros y pueden ser de cualquier tipo de datos que devuelva un entero. El tipo de datos no se puede cambiar mediante la ALTER SEQUENCE instrucción . Para cambiar el tipo de datos, quite y cree el objeto de secuencia.

Una secuencia es un objeto enlazado a un esquema definido por el usuario que genera una secuencia de valores numéricos según una especificación. Los nuevos valores se generan a partir de una secuencia llamando a la NEXT VALUE FOR función . Use sp_sequence_get_range para obtener varios números de secuencia a la vez. Para obtener información y escenarios que usan CREATE SEQUENCE, sp_sequence_get_rangey la NEXT VALUE FOR función , vea Números de secuencia.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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 } ]
[ ; ]

Argumentos

sequence_name

Especifica el nombre exclusivo por el que se conoce la secuencia en la base de datos. El tipo es sysname.

RESTART [ WITH <constant>]

El siguiente valor devuelto por el objeto de secuencia. Si se proporciona, el RESTART WITH valor debe ser un entero menor o igual que el máximo y mayor o igual que el valor mínimo del objeto de secuencia. Si se omite el WITH valor, la numeración de secuencia se reinicia en función de las opciones originales CREATE SEQUENCE .

INCREMENT BY <(constante)>

Valor que se usa para incrementar (o disminuir si es negativo) el valor base del objeto de secuencia para cada llamada a la NEXT VALUE FOR función. Si el incremento es un valor negativo, el objeto de secuencia es descendente; de lo contrario, es ascendente. El incremento no puede ser 0.

[ Constante< MINVALUE >| NO MINVALUE ]

Especifica los límites del objeto de secuencia. Si NO MINVALUE se especifica , se usa el valor mínimo posible del tipo de datos de secuencia.

[ constante< MAXVALUE >| NO MAXVALUE ]

Especifica los límites del objeto de secuencia. Si NO MAXVALUE se especifica , se usa el valor máximo posible del tipo de datos de secuencia.

[ CICLO | SIN CICLO ]

Esta propiedad especifica si el objeto de secuencia debe reiniciarse desde el valor mínimo (o máximo para los objetos de secuencia descendente) o si se produce una excepción cuando se supera su valor mínimo o máximo.

Nota

Después de recorrer el siguiente valor es el valor mínimo o máximo, no el START VALUE de la secuencia.

[ CACHE [ <constante> ] | SIN CACHE ]

Aumenta el rendimiento de las aplicaciones que usan los objetos de secuencia minimizando el número de operaciones de E/S necesarias para conservar los valores generados en las tablas del sistema.

Para obtener más información sobre el comportamiento de la memoria caché, consulte CREATE SEQUENCE.

Comentarios

Para obtener información sobre cómo se crean las secuencias y cómo se administra la caché de secuencias, consulte CREATE SEQUENCE.

Las MINVALUE secuencias ascendentes y las MAXVALUE secuencias descendentes no se pueden modificar en un valor que no permita el START WITH valor de la secuencia. Para cambiar el MINVALUE de una secuencia ascendente a un número mayor que el START WITH valor o cambiar la MAXVALUE de una secuencia descendente a un número menor que el START WITH valor, incluya el RESTART WITH argumento para reiniciar la secuencia en un punto deseado que se encuentra dentro del intervalo mínimo y máximo.

Metadatos

Para obtener información sobre las secuencias, consulte sys.sequences.

Permisos

Requiere ALTER permiso en la secuencia o ALTER el permiso en el esquema. Para conceder ALTER permiso en la secuencia, use ALTER ON OBJECT en el formato siguiente:

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

La propiedad de un objeto de secuencia se puede transferir mediante la ALTER AUTHORIZATION instrucción .

Auditoría

Para auditar ALTER SEQUENCE, supervise .SCHEMA_OBJECT_CHANGE_GROUP

Ejemplos

Para obtener ejemplos de la creación de secuencias y el uso de la NEXT VALUE FOR función para generar números de secuencia, consulte Números de secuencia.

A. Modificar una secuencia

En el siguiente ejemplo se crea un esquema denominado Test y una secuencia denominada TestSeq usando el tipo de datos int, con un rango de 100 a 200. La secuencia se inicia con 125 y se incrementa en 25 cada vez que se genera un número. Dado que la secuencia está configurada para ciclo, cuando el valor supera el valor máximo de 200, la secuencia se reinicia con el valor mínimo de 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

En el siguiente ejemplo se modifica la secuencia TestSeq para que tenga un rango de 50 a 200. La secuencia reinicia la serie de la numeración con 100 y se incrementa en 50 cada vez que se genera un número.

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

Dado que la secuencia no ciclo, la NEXT VALUE FOR función produce un error cuando la secuencia supera los 200.

B. Reiniciar una secuencia

En el ejemplo siguiente se crea una secuencia denominada CountBy1. La secuencia usa los valores predeterminados.

CREATE SEQUENCE Test.CountBy1;

Para generar un valor de secuencia, el propietario ejecuta la siguiente instrucción:

SELECT  NEXT VALUE FOR Test.CountBy1;

El valor devuelto de -9.223.372.036.854.775.808 es el más bajo posible para el tipo de datos bigint. El propietario se da cuenta de que quería que la secuencia comenzara con 1, pero no indicaba la START WITH cláusula cuando creó la secuencia. Para corregir este error, el propietario ejecuta la siguiente instrucción.

ALTER SEQUENCE Test.CountBy1
    RESTART WITH 1;

A continuación, el propietario ejecuta de nuevo la siguiente instrucción para generar un número de secuencia.

SELECT  NEXT VALUE FOR Test.CountBy1;

El número es ahora 1, tal y como se esperaba.

La CountBy1 secuencia se creó con el valor predeterminado de NO CYCLE , por lo que dejará de funcionar después de generar el número 9.223.372.036.854.775.807. Las llamadas posteriores al objeto de secuencia devuelven el error 11728. La siguiente instrucción cambia el objeto de secuencia para que se recorra en ciclo y establece una memoria caché de 20.

ALTER SEQUENCE Test.CountBy1
    CYCLE
    CACHE 20;

Ahora, cuando el objeto de secuencia alcance 9.223.372.036.854.775.807 se recorrerá en ciclo y el número siguiente al recorrido del ciclo será el mínimo del tipo de datos, -9.223.372.036.854.775.808.

El propietario se dio cuenta de que el tipo de datos bigint usa 8 bytes cada vez que se usa. El tipo de datos int que usa 4 bytes es suficiente. Sin embargo, el tipo de datos de un objeto de secuencia no se puede modificar. Para cambiar a un tipo de datos int, el propietario debe quitar el objeto de secuencia y volver a crear el objeto con el tipo de datos correcto.