quarta-feira, 10 de setembro de 2014

Zerar coluna identity SQL Server (Reset Identity)

Algumas vezes é preciso zerar os dados de uma tabela no SQL Server, e para não perder a sequência de IDs, as vezes também é preciso zerar o identity.

Ao invés de recriar a tabela, o simples comando CHECKIDENT pode fazer isso.

Funciona assim:

DBCC CHECKIDENT('NomeDaTabela', RESEED, 0)

Onde:

  • 'NomeDaTabela' é o nome da tabela que terá o identity reiniciado;
  • RESEED é o comando para reiniciar o identity;
  • 0 é o número para o qual você quer que a contagem recomece, no caso zero. Caso queira voltar para outro número, basta indicá-lo.
Nota: Neste exemplo o próximo número do identity será 1, caso queria que seja 101 por exemplo, atribua o valor 100.

Vamos ao exemplo?

1º) Vamos criar uma tabela de funcionários com identity na coluna Id [Funcionarios]:


CREATE TABLE [dbo].[Funcionarios](
[Id] [int] IDENTITY(1,1) NOT NULL, --Indica que a coluna será incremental de 1
[Nome] [varchar](100) NULL,
[Email] [varchar](200) NULL
 CONSTRAINT [PK_Usuario] PRIMARY KEY CLUSTERED (Id) 
)


2º) Vamos inserir alguns registros na tabela de funcionários:

INSERT INTO Funcionarios VALUES ('Ronaldo Luís Nazário de Lima', 'ronaldo.nazario@exemplo.com.br')
INSERT INTO Funcionarios VALUES ('David Luiz', 'david.luiz@exemplo.com.br')
INSERT INTO Funcionarios VALUES ('Edson Arantes do Nascimento', 'edson.pele@exemplo.com.br')

3º) Vamos checar os ids dos registros inseridos:

4º) Vamos checar o identity atual da tabela, utilizando o mesmo comando RESEED mas sem passar o parâmetro numérico.



5º) Vamos deletar os registros e fazer uma nova inserção, que terá o ID 4:

DELETE FROM [Funcionarios]
INSERT INTO Funcionarios VALUES ('Ronaldo Luís Nazário de Lima', 'ronaldo.nazario@exemplo.com.br')


6º) Como não queremos que a tabela comece do id 4, vamos apagar os registros novamente e zerar o seu Id:
DELETE FROM [Funcionarios]

DBCC CHECKIDENT('[Funcionarios]', RESEED, 0) --Repita o comando, porque na 1ª vez o SQL vai mostrar o identity atual

INSERT INTO Funcionarios VALUES ('Ronaldo Luís Nazário de Lima', 'ronaldo.nazario@exemplo.com.br')

SELECT * FROM [Funcionarios]




E é assim que é possível zerar o identity das tabelas do SQL Server.

Útil principalmente quando há revisão em dados e deseja manter Ids iguais entre diferentes ambientes, como de desenvolvimento e produção por exemplo.

3 comentários:

  1. e para desligar a fubçao
    DBCC CHECKIDENT('NomeDaTabela', RESEED, 0) ?

    ResponderExcluir
    Respostas
    1. Oi Thiago. Obrigado pela visita e pelo comentário. Não precisa desligar a função, ela apenas reinicia o contador da tabela.

      Excluir