A propriedade IDENTITY é utilizada para atributos (campos/colunas) das tabelas nas funções CREATE TABLE e ALTER TABLE, e tem como finalidade incrementar um valor a cada nova inserção.

A sintaxe para usar está propriedade é:

IDENTITY [ (início , incremento ) ]

Onde:

  • Início: Valor a ser utilizado para o primeiro valor inserido na coluna.
  • Incremento: Valor a ser incrementado a cada nova inserção.

Exemplo para criação de uma tabela utilizando um campo auto incremento:

auto incremento

Nesse exemplo a tabela Tbl_Clientes possui três atributos, sendo Codigo a chave primária e tendo seu primeiro valor válido igual a 1 e se auto incrementando de 1 em 1, ou seja, primeiro registro igual a 1, o segundo igual a 2 e assim por diante.

Nota: É permitido somente um campo IDENTITY por tabela.

A inserção em tabelas que possuem campos auto incrementos deve-se suprimir da sintaxe INSERT os mesmos, conforme exemplo a seguir:

suprindo a sintaxe Insert

Como foi demonstrado no exemplo, deve-se suprimir o atributo Codigo que é auto incremento para o valor do mesmo ser gerado automaticamente conforme suas configurações.

Para a sequência do artigo será preciso rodar o bloco de comandos SQL, conforme a imagem a seguir:

bloco de comandos SQL

O resultado de um SELECT na tabela Tbl_Clientes deve ser o seguinte:

Tabela tbl_cliente

Para saber o valor atual do IDENTITY, basta usar o seguinte comando:

SELECT IDENT_CURRENT('Tbl_Clientes');

Seguindo todos os exemplos anteriores, o resultado irá retornar “4”. Em uma nova instrução de INSERT o valor do atributo Codigo será “5”. Em um determinado momento torna-se necessário inserir um novo registro porem com valor retroativo ao IDENTITY, ou seja, um valor que já foi inserido e deletado. Nos exemplos esse valor é o “3”. Utilizando a situação descrita é possível “desligar” o IDENTITY em uma instrução de INSERT, como demonstra o bloco de comandos SQL a seguir:

SET IDENTITY_INSERT [Tbl_Clientes] ON
 INSERT INTO [Tbl_Clientes] (Codigo,Nome,UF) VALUES (3,'Ricardo','RS')
 SET IDENTITY_INSERT [Tbl_Clientes] OFF

O que acontece ao rodar o bloco de comandos SQL acima é que o SQL Server não gera o valor de auto incremento para o atributo Codigo, permitindo assim que o usuário informe manualmente o valor para o mesmo.

Dando sequência, pressuponha que seja rodada a seguinte instrução SQL:

DELETE FROM Tbl_Clientes;

Nesse caso todos os registros da tabela foram apagados, porem a sequência para auto incremento continua vigente, ou seja, o próximo registro a ser inserido terá o valor 5 para o atributo Codigo.

Caso for necessário, é possível “reiniciar” a sequência de auto incremento utilizando o comando abaixo:

DBCC Checkident( Tbl_Clientes, reseed, 0)

Observa-se que a sequência foi alterada para 0, sendo assim a próxima inserção terá valor igual a “1”. Não é obrigado iniciar a sequência do 0, podendo alterar esse valor conforme as necessidades vigentes.