- 04/11/2017
- 10 minutes to read
-
- W
- c
- r
- M
- m
-
+7
Applies to: SQL Server (all supported versions) Azure SQL Database
Creates a sequence object and specifies its properties. Uma sequência é um objeto de ligação schema definido pelo usuário que gera uma sequência de valores numéricos de acordo com a especificação com a qual a sequência foi criada. A sequência de valores numéricos é gerada numa ordem ascendente ou descendente a um intervalo definido e pode ser configurada para reiniciar (ciclo) quando esgotada. Sequências, ao contrário das colunas de identidade, não estão associadas com tabelas específicas. Aplicações referem-se a um objeto de sequência para recuperar o seu próximo valor. A relação entre sequências e tabelas é controlada pela aplicação. As aplicações do usuário podem referenciar um objeto de sequência e coordenar os valores através de várias linhas e tabelas.
Ao contrário dos valores das colunas de identidade que são gerados quando as linhas são inseridas, uma aplicação pode obter o número de sequência seguinte sem inserir a linha, invocando o valor seguinte para a função. Use sp_sequence_get_range para obter vários números de sequência de uma vez.
para informações e cenários que usam tanto Criar Sequência quanto o próximo valor para a função, veja números de sequência.
Sintaxe Transact-SQL Convenções
Sintaxe
CREATE SEQUENCE sequence_name ] } | { NO MINVALUE } ] } | { NO MAXVALUE } ] } | { NO CACHE } ]
Nota
Para exibir a sintaxe Transact-SQL para o SQL Server 2014 e versões anteriores, consulte versões Anteriores de documentação.
argumentos
sequence_name
especifica o nome único pelo qual a sequência é conhecida na base de dados. O tipo é sysname.
especifica os limites para o objeto de sequência. O valor mínimo padrão para um objeto de sequência nova é o valor mínimo do tipo de dados do objeto de sequência. Este é zero para o tipo de dados tinyint e um número negativo para todos os outros tipos de dados.
propriedade que especifica se o objeto de sequência deve reiniciar a partir do valor mínimo (ou máximo para objetos de sequência descendente) ou lançar uma exceção quando o seu valor mínimo ou máximo é excedido. A opção de ciclo padrão para objetos de sequência nova é nenhum ciclo.
Nota
Ciclo uma sequência recomeça a partir do valor mínimo ou máximo, não a partir do valor inicial.
/ no CACHE]
aumenta o desempenho para aplicações que usam objetos de sequência, minimizando o número de discos IOs que são necessários para gerar números de sequência. É por omissão a ‘CACHE’.
Por exemplo, se um tamanho de cache de 50 é escolhido, o servidor SQL não mantém 50 valores individuais em cache. Ele só cache o valor atual e o número de valores deixados no cache. Isto significa que a quantidade de memória necessária para armazenar o cache é sempre duas instâncias do tipo de dados do objeto de sequência.
Nota
Se a opção da ‘cache’ estiver activa sem indicar o tamanho da ‘cache’, o motor da Base de dados irá seleccionar um tamanho. No entanto, os utilizadores não devem confiar na coerência da selecção. A Microsoft pode alterar o método de cálculo do tamanho do cache sem aviso prévio.
quando criado com a opção CACHE, uma paragem inesperada (como uma falha de energia) pode resultar na perda de números de sequência que permanecem na cache.
Observações gerais
os números de sequência são gerados fora do âmbito da operação em curso. São consumidos quer a transacção que utiliza o número de sequência seja cometida ou retrocedida. A validação duplicada só ocorre quando um registo é completamente preenchido. Isso pode resultar em alguns casos em que o mesmo número é usado para mais de um registro durante a criação, mas então é identificado como um duplicado. Se isso ocorrer e outros valores de numeração automática tiverem sido aplicados a registros subsequentes, isso pode resultar em um intervalo entre valores de numeração automática e é comportamento esperado.
Cache management
para melhorar o desempenho, o servidor SQL pré-aloca o número de números de sequência especificados pelo argumento do CACHE.
Por exemplo, uma nova sequência é criada com um valor inicial de 1 e um tamanho de cache de 15. Quando o primeiro valor é necessário, os valores de 1 a 15 são disponibilizados a partir da memória. O último valor em cache (15) é escrito nas tabelas do sistema no disco. Quando todos os 15 números são usados, o próximo pedido (para o número 16) fará com que o cache seja alocado novamente. O novo último valor em cache (30) será escrito nas tabelas do sistema.
Se o motor da Base de dados for parado depois de usar 22 números, o próximo número de sequência pretendido na memória (23) é escrito nas tabelas do sistema, substituindo o número previamente armazenado.
após reiniciar o servidor SQL e um número de sequência é necessário, o número inicial é lido a partir das tabelas do sistema (23). A quantidade de cache de 15 números (23-38) é alocada à memória e o próximo número não-cache (39) é escrito nas tabelas do sistema.
Se o motor da Base de Dados parar anormalmente por um evento como uma falha de energia, a sequência recomeça com o número lido a partir das tabelas do sistema (39). Quaisquer números de sequência alocados à memória (mas nunca solicitados por um usuário ou aplicação) são perdidos. Esta funcionalidade pode deixar lacunas, mas garante que o mesmo valor nunca será emitido duas vezes para um único objeto de sequência, a menos que seja definido como ciclo ou seja reiniciado manualmente.
o cache é mantido na memória, rastreando o valor atual (o último valor emitido) e o número de valores deixados no cache. Portanto, a quantidade de memória usada pelo cache é sempre duas instâncias do tipo de dados do objeto de sequência.
configurar o argumento da ‘cache’ para nenhuma ‘CACHE’ escreve o valor da sequência actual nas tabelas do sistema sempre que uma sequência é usada. Isso pode diminuir o desempenho aumentando o acesso ao disco, mas reduz a chance de falhas não intencionais. As lacunas ainda podem ocorrer se os números forem solicitados usando o próximo valor para as funções sp_sequence_get_range, mas então os números não são usados ou são usados em transações por persistir.
Quando um objeto de sequência usa a opção CACHE, se você reiniciar o objeto de sequência, ou alterar o incremento, ciclo, MINVALUE, MAXVALUE, ou as propriedades do tamanho da cache, ele fará com que a cache seja escrita nas tabelas do sistema antes que a mudança ocorra. Em seguida, a cache é recarregada começando com o valor atual (ou seja, nenhum número é ignorado). Mudar o tamanho da cache faz efeito imediatamente.
CACHE opção quando os valores em cache estão disponíveis
O seguinte processo ocorre sempre que um objeto de sequência é solicitado para gerar o próximo valor para a opção CACHE se houver valores não utilizados disponíveis na cache de memória para o objeto de sequência.
-
calcula-se o valor seguinte para o objecto sequencial.
-
o novo valor actual para o objecto de sequência é actualizado na memória.
-
O valor calculado é devolvido à declaração chamadora.
CACHE opção quando a cache é esgotada
o seguinte processo ocorre toda vez que um objeto de sequência é solicitado para gerar o próximo valor para a opção CACHE se a cache tiver sido esgotada:
-
o próximo valor para o objeto de sequência é calculado.
-
o último valor para a nova ‘cache’ é calculado.
-
a linha da tabela do sistema para o objecto sequencial é bloqueada, e o valor calculado no Passo 2 (o último valor) é escrito na tabela do sistema. Um XEvent esgotado em cache é disparado para notificar o usuário do novo valor persistido.
e a opção de CACHE
O seguinte processo ocorre sempre que um objeto de seqüência é solicitado para gerar o valor próximo a NENHUMA opção de CACHE:
-
O seguinte valor para o objeto de seqüência é calculada.
-
o novo valor actual para o objecto de sequência é escrito na tabela do sistema.
-
O valor calculado é devolvido à declaração chamadora.
metadados
para informação sobre sequências, sistemas de consulta.sequência.
segurança
permissões
requer permissão para criar sequência, alterar ou controlar no esquema.
-
membros do DB_ proprietário e DB_ ddladmin funções fixas de banco de dados podem criar, alterar e largar objetos de sequência.
-
membros do DB_ proprietário e DB_ datawriter funções fixas de banco de dados podem atualizar objetos de sequência, fazendo com que eles gerem números.
o exemplo seguinte concede ao Utilizador AdventureWorks\Larry Permissão para criar sequências no esquema de testes.
GRANT CREATE SEQUENCE ON SCHEMA::Test TO
propriedade de um objecto de sequência pode ser transferida usando a declaração de alteração da autorização.
Se uma sequência usa um tipo de dados definido pelo usuário, o criador da sequência deve ter permissão de referências sobre o tipo.
auditoria
para auditoria Criar Sequência, monitorize o grupo ESQUEMA_OBJECT_CHANGE_.
exemplos
para exemplos de criação de sequências e usando o próximo valor para a função gerar números de sequência, veja números de sequência.
a maioria dos seguintes exemplos criam objetos de sequência em um esquema chamado Test.
para criar o esquema de teste, execute a seguinte instrução.
CREATE SCHEMA Test ; GO
A. criando uma sequência que aumenta por 1
no exemplo seguinte, Thierry cria uma sequência chamada CountBy1 que aumenta por um cada vez que é usado.
CREATE SEQUENCE Test.CountBy1 START WITH 1 INCREMENT BY 1 ; GO
B. criando uma sequência que diminui em 1
o seguinte exemplo começa em 0 e conta em números negativos por um de cada vez que é usado.
CREATE SEQUENCE Test.CountByNeg1 START WITH 0 INCREMENT BY -1 ; GO
C. Criando uma sequência que aumenta em 5
o exemplo seguinte cria uma sequência que aumenta em 5 cada vez que é usado.
CREATE SEQUENCE Test.CountBy1 START WITH 5 INCREMENT BY 5 ; GO
D. criando uma sequência que começa com um número designado
após a importação de uma tabela, Thierry nota que o número de identificação mais elevado utilizado é 24.328. Thierry precisa de uma sequência que irá gerar números a partir de 24.329. O seguinte código cria uma sequência que começa com 24.329 e incrementos por 1.
CREATE SEQUENCE Test.ID_Seq START WITH 24329 INCREMENT BY 1 ; GO
E. Criando uma sequência usando valores padrão
o exemplo seguinte cria uma sequência usando os valores padrão.
CREATE SEQUENCE Test.TestSequence ;
Execute a seguinte declaração para ver as propriedades da sequência.
SELECT * FROM sys.sequences WHERE name = 'TestSequence' ;
uma lista parcial da saída demonstra os valores padrão.
Output | Default value |
---|---|
start_value |
-9223372036854775808 |
increment |
1 |
mimimum_value |
-9223372036854775808 |
maximum_value |
9223372036854775807 |
is_cycling |
0 |
is_cached |
1 |
current_value |
-9223372036854775808 |
F. Criar uma sequência com um tipo de dados específico
O exemplo a seguir cria uma sequência usando o tipo de dados smallint, com um intervalo de-32.768 a 32.767.
CREATE SEQUENCE SmallSeq AS smallint ;
G. Criando uma sequência usando todos os argumentos
O exemplo a seguir cria uma seqüência nomeada de DecSeq usando o tipo de dados decimal, tendo um intervalo de 0 a 255. A sequência começa com 125 e incrementos em 25 cada vez 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 recomeça ao valor mínimo de 100.
CREATE SEQUENCE Test.DecSeq AS decimal(3,0) START WITH 125 INCREMENT BY 25 MINVALUE 100 MAXVALUE 200 CYCLE CACHE 3 ;
Execute a instrução a seguir para ver o primeiro valor; o START WITH
opção de 125.
SELECT NEXT VALUE FOR Test.DecSeq;
Execute a declaração mais três vezes para retornar 150, 175, e 200.
Execute a instrução novamente para ver como o valor inicial volta para oMINVALUE
opção de 100.
Execute o seguinte código para confirmar o tamanho da cache e ver o valor atual.
SELECT cache_size, current_value FROM sys.sequences WHERE name = 'DecSeq' ;
Ver também
ALTER SEQUENCE(Transact-SQL)
DROP SEQUENCE (Transact-SQL)
NEXT VALUE FOR (Transact-SQL)
Sequence Numbers