Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Redefinir chave primária (int como identidade)


O valor máximo para um bigint é 9.223.372.036.854.775.807 . Se você chegasse a 8 dígitos em um dia, ainda precisaria de 10 dias para atingir o máximo. Isso é como 25 milhões de anos.

Supondo que você ainda queira redefinir a coluna, a primeira pergunta que tenho é:a ordenação das linhas é importante? Ou seja, você confia no fato de que a linha 1000 vem antes de 1100 para, digamos, ordenação cronológica ou absoluta? Caso contrário, é fácil:exclua a coluna e adicione-a novamente. Ei presto, novos valores.

Se você precisar manter a ordem, precisará fazê-lo com um pouco mais de cuidado:
  1. Bloqueie a mesa;
  2. Altere o tipo para que não seja mais incremento automático;
  3. Crie uma nova coluna. É melhor fazer com que não tenha índices por enquanto, pois a atualização do índice diminuirá a velocidade das inserções;
  4. Preencha os valores no segundo com um loop de algum tipo incrementando um contador (como o truque do rownum do SQL Server) ordenando as inserções para corresponder à ordem original;
  5. Substitua a coluna antiga pela nova;
  6. Redefinir o incremento automático e o status da chave primária.