Compartilhar via


ALTER SEQUÊNCIA (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureBanco de dados SQL no Microsoft Fabric

Modifica os argumentos de um objeto de sequência existente. Se a sequência foi criada com a opção CACHE , alterar a sequência recriará o cache.

Os objetos de sequência são criados usando a instrução CREATE SEQUENCE. As sequências são valores inteiros e podem ser de qualquer tipo de dados que retorne um inteiro. O tipo de dados não pode ser alterado usando a ALTER SEQUENCE instrução. Para alterar o tipo de dados, remova e crie o objeto de sequência.

Uma sequência é um objeto associado a um esquema definido pelo usuário que gera uma sequência de valores numéricos de acordo com uma especificação. Novos valores são gerados a partir de uma sequência chamando a NEXT VALUE FOR função. Use sp_sequence_get_range para obter vários números de sequência ao mesmo tempo. Para obter informações e cenários que usam ambos CREATE SEQUENCE, sp_sequence_get_rangee a NEXT VALUE FOR função, consulte Números de Sequência.

Convenções de sintaxe de Transact-SQL

Sintaxe

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 o nome exclusivo pelo qual a sequência é conhecida no banco de dados. O tipo é sysname.

RESTART [ WITH <constante> ]

O próximo valor retornado pelo objeto de sequência. Se fornecido, o RESTART WITH valor deve ser um inteiro menor ou igual ao máximo e maior ou igual ao valor mínimo do objeto de sequência. Se o WITH valor for omitido, a numeração de sequência será reiniciada com base nas opções originais CREATE SEQUENCE .

INCREMENT BY <constante>

O valor usado para incrementar (ou diminuir se negativo) o valor base do objeto de sequência para cada chamada à NEXT VALUE FOR função. Se o incremento for um valor negativo, o objeto de sequência estará decrescente, caso contrário, ele será crescente. O incremento não pode ser 0.

[ MINVALUE <constante> | NO MINVALUE ]

Especifica os limites do objeto de sequência. Se NO MINVALUE for especificado, o valor mínimo possível do tipo de dados de sequência será usado.

[ Constante< MAXVALUE >| SEM MAXVALUE ]

Especifica os limites do objeto de sequência. Se NO MAXVALUE for especificado, o valor máximo possível do tipo de dados de sequência será usado.

[ CYCLE | SEM CICLO ]

Essa propriedade especifica se o objeto de sequência deve ser reiniciado do valor mínimo (ou máximo para objetos de sequência decrescente) ou gerar uma exceção quando seu valor mínimo ou máximo for excedido.

Observação

Depois de pedalar o próximo valor é o valor mínimo ou máximo, não o START VALUE da sequência.

[ CACHE [ <constante> ] | SEM CACHE]

Aumenta o desempenho de aplicativos que usam objetos de sequência por meio da minimização do número de E/S necessárias para persistir os valores gerados para as tabelas do sistema.

Para obter mais informações sobre o comportamento do cache, consulte CREATE SEQUENCE.

Comentários

Para obter informações sobre como as sequências são criadas e como o cache de sequência é gerenciado, consulte CREATE SEQUENCE.

As MINVALUE sequências crescentes e as MAXVALUE sequências decrescente não podem ser alteradas para um valor que não permite o START WITH valor da sequência. Para alterar a MINVALUE sequência crescente para um número maior que o START WITH valor ou alterar a MAXVALUE de uma sequência decrescente para um número menor que o START WITH valor, inclua o RESTART WITH argumento para reiniciar a sequência em um ponto desejado que se enquadra no intervalo mínimo e máximo.

Metadados

Para obter informações sobre sequências, consulte sys.sequences.

Permissões

Requer ALTER permissão na sequência ou ALTER permissão no esquema. Para conceder ALTER permissão na sequência, use ALTER ON OBJECT no seguinte formato:

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

A propriedade de um objeto de sequência pode ser transferida usando a ALTER AUTHORIZATION instrução.

Audit

Para auditar ALTER SEQUENCE, monitore o SCHEMA_OBJECT_CHANGE_GROUP.

Exemplos

Para obter exemplos de como criar sequências e usar a NEXT VALUE FOR função para gerar números de sequência, consulte Números de Sequência.

a. Alterar uma sequência

O exemplo a seguir cria um esquema chamado Test e uma sequência chamada TestSeq usando o tipo de dados int com um intervalo de 100 a 200. A sequência começa com 125 e é incrementada em 25 sempre que um número é gerado. Como a sequência é configurada para ciclo, quando o valor excede o valor máximo de 200, a sequência é reiniciada no 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

O exemplo a seguir altera a sequência TestSeq para ter um intervalo de 50 a 200. A sequência reinicia a série de numeração com 100 e é incrementada em 50 sempre que um número é gerado.

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

Como a sequência não é ciclo, a NEXT VALUE FOR função resulta em um erro quando a sequência excede 200.

B. Reiniciar uma sequência

O exemplo a seguir cria uma sequência chamada CountBy1. A sequência usa os valores padrão.

CREATE SEQUENCE Test.CountBy1;

Para gerar um valor de sequência, o proprietário executa a seguinte instrução:

SELECT  NEXT VALUE FOR Test.CountBy1;

O valor -9.223.372.036.854.775.808 retornado é o menor valor possível para o tipo de dados bigint. O proprietário percebe que queria que a sequência começasse com 1, mas não indicou a START WITH cláusula quando criou a sequência. Para corrigir esse erro, o proprietário executa a instrução a seguir.

ALTER SEQUENCE Test.CountBy1
    RESTART WITH 1;

Em seguida, o proprietário executa a instrução a seguir novamente para gerar um número de sequência.

SELECT  NEXT VALUE FOR Test.CountBy1;

O número agora é 1, conforme esperado.

A CountBy1 sequência foi criada usando o valor padrão de modo que ela deixará de NO CYCLE operar após gerar o número 9.223.372.036.854.775.807. As chamadas subsequentes para o objeto de sequência retornam o erro 11728. A instrução a seguir altera o objeto de sequência para executar um ciclo e define um cache de 20.

ALTER SEQUENCE Test.CountBy1
    CYCLE
    CACHE 20;

Agora, quando o objeto de sequência alcançar 9.223.372.036.854.775.807, ele executará o ciclo e o próximo número após o ciclo será o valor mínimo do tipo de dados, -9.223.372.036.854.775.808.

O proprietário percebeu que o tipo de dados bigint usa 8 bytes cada vez que é usado. O tipo de dados int que usa 4 bytes é suficiente. No entanto, o tipo de dados de um objeto de sequência não pode ser alterado. Para alterar para um tipo de dados int, o proprietário deve remover o objeto de sequência e recriá-lo com o tipo de dados correto.