ALTER SEQUENCE (Transact-SQL)

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

Os objetos de sequência são criados com 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 com a instrução ALTER SEQUENCE. 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 ao chamar a função NEXT VALUE FOR. Use sp_sequence_get_range para obter vários números de sequência de uma vez. Para obter informações e cenários que usam CREATE SEQUENCE, sp_sequence_get_range e a função NEXT VALUE FOR, consulte Números de sequência.

Ícone de vínculo de tópico Convenções da sintaxe 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 que será retornado pelo objeto de sequência. Se fornecido, o valor de RESTART WITH deverá ser um inteiro menor ou igual ao valor máximo e maior ou igual ao valor mínimo do objeto de sequência. Se o valor de WITH for omitido, a numeração da sequência reiniciará com base nas opções CREATE SEQUENCE originais.

  • INCREMENT BY <constante>
    O valor usado para incrementar (ou diminuir, se negativo) o valor base do objeto de sequência de cada chamada para a função NEXT VALUE FOR. Se o incremento for um valor negativo, o objeto de sequência será decrescente; caso contrário, 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.

  • [ MAXVALUE <constante> | NO 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 | NO CYCLE ]
    Essa propriedade especifica se o objeto de sequência deve reiniciar a partir do valor mínimo (ou máximo para objetos de sequência decrescentes) ou gerar uma exceção quando seu valor mínimo ou máximo for excedido.

    ObservaçãoObservação

    Após o ciclo, o próximo valor é o valor mínimo ou máximo, e não o START VALUE da sequência.

  • [ CACHE [<constante> ] | NO 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 (Transact-SQL).

Comentários

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

O MINVALUE de sequências crescentes e o MAXVALUE de sequências decrescentes não podem ser alterados para um valor que não permita o valor START VALUE da sequência. Para alterar o MINVALUE de uma sequência crescente para um número maior que o valor de START WITH ou para alterar o MAXVALUE de uma sequência decrescente para um número menor que o valor de START WITH, inclua o argumento RESTART WITH para reiniciar a sequência em um ponto desejado que esteja dentro do intervalo mínimo e máximo.

Metadados

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

Segurança

Permissões

Exige a permissão ALTER na sequência ou a permissão ALTER no esquema. Para conceder a permissão ALTER 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 com o uso da instrução ALTER AUTHORIZATION.

Auditoria

Para auditar ALTER SEQUENCE, monitore SCHEMA_OBJECT_CHANGE_GROUP.

Exemplos

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

A.Alterando 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 0 a 255. A sequência começa com 125 e é incrementada em 25 sempre que um número é gerado. Como a sequência é configurada para executar um 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 0 a 255. 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 irá executar nenhum ciclo, a função NEXT VALUE FOR resultará em um erro quando a sequência exceder 200.

B.Reiniciando 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 ele deseja que a sequência seja iniciada com 1, mas que não indicou a cláusula START WITH 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 sequência CountBy1 foi criada usando o valor padrão de NO CYCLE e, por isso, ela deixará de funcionar após gerar o número 9.223.372.036.854.775.807. As chamadas subsequentes para o objeto de sequência retornarão 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 sempre que é utilizado. O tipo de dados int que usa 4 bytes é suficiente. Entretanto, 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.

Consulte também

Referência

CREATE SEQUENCE (Transact-SQL)

DROP SEQUENCE (Transact-SQL)

NEXT VALUE FOR (Transact-SQL)

sp_sequence_get_range (Transact-SQL)

Conceitos

Números de sequência