Como corrigir ordenação em campos IDENTITY Auto Incremento em todo banco de dados Microsoft SQL SERVER
Algumas vezes, os valores de um campo de auto incremento (Identity) podem ficar desordenados ou com uma numeração onde já exista um registro na tabela, isto pode ocorrer, principalmente após a Restauração de um banco de dados.
Desta Forma, ao efetuar um INSERT em uma determinada tabela o erro abaixo é apresentado:
SQL Server Native Client][SQL Server] Violation of UNIQUE KEY constraint ‘tabela#_#campoid’. Cannot insert duplicate key in object ‘dbo.tabela’.
Para corrigir o auto incremento de uma tabela, basta executar o comando:
DBCC CHECKIDENT(“Tabela”, RESEED, 30)
No exemplo acima, foi alterado o valor do campo Identity da tabela para 30 e o próximo comando Insert iniciará o auto incremento a partir deste numero.
Mas, E se você precisa corrigir a numeração de campos Identity em todas as tabelas do banco de dados?
Já vi alguns colegas construírem Querys Complexas, montando um cursor lendo com todas as tabelas do banco (sys.tables) para depois armazenar em uma variável o último valor do campo Identity com a função Max e executar o DBCC CHECKIDENT(“Tabela”, RESEED, Variável Valor máximo Encontrado).
Ufa!!! Que trabalhão… Pare de Sofrer. Kkkk… Isto é trabalhoso, oneroso e lento na execução…
Quando surge uma necessidade deste tipo, basta executar o seguinte comando:
exec sp_MSforeachtable @command1 = ‘DBCC CHECKIDENT (”?”, RESEED)’
Com isto, cada tabela do banco de dados terá o campo Identity corrigido com o ultimo valor máximo inserido.
É isso ai pessoal !
Espero que tenham gostado dessas dicas.
Abraços