Eu li que após o SQL Server 2000, a capacidade de "desidentificar" uma coluna de identidade foi removida. E que isso era "By Design" (não apenas um recurso que faltava).
Aqui está um exemplo que encontrei em um blog . Envolve a atualização das tabelas do sistema. (E essa capacidade foi removida após o SQL Server 2000.) Entendo que fazer isso através de tabelas do sistema não é uma boa ideia. Estou apenas me perguntando por que um recurso para fazer isso de outra maneira não existe.
Contornar isso vai me causar uma quantidade considerável de trabalho. (Copiando centenas de milhões de linhas para novas tabelas em um ambiente intolerante ao tempo de inatividade.)
Então, pensei em perguntar "por que".
O que mudou no Sql Server 2005 e em versões posteriores que tornaram isso uma coisa ruim? Ou sempre foi ruim e simplesmente não foi trancado?
Que "prática recomendada" (ou princípio semelhante) seria violada ao tornar uma coluna de identidade uma coluna normal novamente?
-
Atualize para responder à solicitação de "por que estou fazendo isso":
Este é um resumo de nível muito alto: vou começar a adicionar partições às minhas tabelas. (Para que eu possa arquivar / limpar dados antigos.) Tudo isso é fácil. Ocasionalmente, porém, preciso mover um registro para uma partição diferente para que não seja removido (quando uma partição é apresentada para arquivamento / exclusão). (Minha coluna de particionamento aumenta em 2 para que haja sempre espaço para mover a linha para uma partição diferente.)
Mas se a coluna de particionamento for uma coluna de identidade, eu tenho que excluir e reinserir o valor (não há como atualizar o valor de uma coluna de identidade). O que causa problemas com a replicação.
Então, eu estou querendo usar uma sequência em vez de uma coluna de identidade. Mas essa opção é muito difícil em grandes bancos de dados.