Eu tenho uma tabela com uma coluna IDENTITY. Durante o desenvolvimento, excluo as linhas de tempos em tempos e as adiciono novamente. Mas os valores de IDENTITY sempre continuaram aumentando e não começaram de 1 quando eu os adicionei novamente. Agora meu id vai de 68 -> 92 e isso trava meu código.
Como faço para redefinir o valor IDENTITY?
Você pode redefinir o valor de identidade
Então, da próxima vez que você inserir em TableName, o valor de identidade inserido será 1.
Quando você exclui linhas da tabela, isso não redefinirá o valor de Identidade, mas continuará aumentando. Assim como aconteceu no seu caso.
Agora, quando você truncar a tabela, ele redefinirá o valor de Identidade para seu valor de Semente original da tabela.
Consulte: SQL SERVER – DELETE, TRUNCATE e RESEED Identity para um exemplo detalhado e algumas boas explicações sobre a diferença entre truncar e excluir
Kin mostrou como você pode redefinir o valor IDENTITY, mas fora de um ambiente de desenvolvimento quando você está realmente removendo todos os dados, por que você precisa fazer isso?
Espero que você não pretenda manter uma sequência contígua de valores IDENTITY quando estiver em produção. E espero que você não esteja realmente escrevendo seu código para codificar os valores de IDENTITY. Se esses forem valores de ID significativos, você deve parar de usar a propriedade IDENTITY.
Algumas coisas podem impedir que isso aconteça:
não será corrigido até que o SQL Server 2014nunca seja corrigido (a menos que você use um sinalizador de rastreamento não documentado e muito caro) pelo qual uma reinicialização parecerá descartar até 1000 valores de sua coluna IDENTITY . O bug no Connect sugere que isso é restrito a eventos de failover envolvendo grupos de disponibilidade, mas posso garantir que o bug é muito mais amplo do que isso.Em resumo, se você se preocupa com as lacunas ou deseja dar um significado específico a esses valores, pare de usar IDENTIDADE. Elimine e recrie a tabela e, quando precisar excluir os valores e preencher novamente, execute uma atualização ou uma inserção com valores codificados para essa coluna.
Como um aparte, chave primária e identidade não são a mesma coisa. Uma coluna de identidade não é uma chave primária, a menos que você a defina explicitamente como tal, e certamente pode ter uma chave primária que não seja uma coluna de identidade.
Se você precisar apenas eliminar as últimas linhas que não seguiram o valor incremental de um campo de identidade, existe uma maneira fácil e segura:
e você está feito.