ALTER SEQUENCE (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Modifica os argumentos de um objeto de sequência existente. Se a sequência tiver sido 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 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, veja 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 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çã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, confira 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, confira 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.
Audit
Para auditar ALTER SEQUENCE, monitore o 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 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 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 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
Uma vez que a sequência não 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
CREATE SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
NEXT VALUE FOR (Transact-SQL)
Números de sequência
sp_sequence_get_range (Transact-SQL)