Compartilhar via


SEQUENCES x IDENTITY. Qual utilizar ?

Apesar de possuírem semelhanças, SEQUENCE e IDENTITY são diferentes em vários aspectos. Vamos abordar algumas condições que podem ajudar na sua decisão de qual utilizar em suas tabelas.

Os objetos **SEQUENCE **são independentes à tabela(s), podem ter seu valor atualizado e ser consultado sempre que for necessário sem a necessidade de declarar sua tabela vinculada e/ou campo que recebe seu conteúdo.  

O contrário ocorre com o IDENTITY, que é uma propriedade de uma determinada coluna e que deve ser indicada no momento da sua criação ou alteração dentro da tabela.

**SEQUENCE **pode fornecer um novo valor antes mesmo de inserir um registro na sua tabela vinculada, diferente do IDENTITY, onde para obter um novo valor é necessário executar o comando INSERT ou uma consulta com a função agregada MAX (acrescentado do valor 1) referenciando a coluna da tabela.

Com o IDENTITY não podemos gerar novos valores em uma instrução UPDATE, enquanto que com SEQUENCE é possível.

A propriedade IDENTITY possibilita definir o número inicial e como será o seu incremento a cada novo registro adicionado na tabela. Já o objeto SEQUENCE permite que seja controlado, definindo um tamanho inicial, um mínimo e máximo, se este objeto deve ser *cíclico, permitindo a reutilização de valores, *e até, possibilitando aumentar o desempenho das consultas armazenando parte de seu conteúdo em cache (pode ocorrer perda de dados caso seja utilizada).

SEQUENCE possibilita manter valores sequenciais em uma transação, utilizando para isso a procedure SP_SEQUENCE_GET_RANGE, retornando um intervalo de valores, com **IDENTITY **isto não é possível por só podermos reservar na transação o valor atual.

Em ambos, é necessário definir se os valores são exclusivos através de constraints como PRIMARY KEY ou UNIQUE. Também não fazem parte de declarações ANSI SQL e são suportadas em apenas algumas versões do SQL Server: IDENTITY à partir do SQL Server 6.0 (compatibilidade 60) e o SEQUENCE à partir do SQL Server 2012 (compatibilidade 110).

Existem diversas outras funções que complementam o uso tanto do SEQUENCE como do IDENTITY . Espero que este conteúdo possa ajudar você a definir melhor qual destas opções se encaixa às necessidades de sua solução.