Estou procurando a melhor maneira de alterar a chave primária em uma tabela no meu banco de dados sem ter que reinserir completamente os dados dos arquivos novamente. A modificação que farei removerá parte da chave primária, o que resultará em dezenas de milhares de linhas que precisam ser agrupadas.
A parte da chave que está sendo removida é um campo de data, que originalmente era necessário para ajudar a identificar exclusivamente os dados recebidos. No entanto, a maneira como esse campo é atribuído na fonte (fora do meu controle) mudou desde então e agora queremos manter apenas a ocorrência mais antiga de um registro específico e descartar as ocorrências posteriores.
O restante dos campos na chave (4 FK's) produzirá registros exclusivos.
Presumo que vou precisar transferir os dados para outra tabela, fazer a alteração e depois inserir novamente? Ou há um modo melhor?
Se os quatro registros ditarem um único e você quiser o primeiro por data, então por que não inserir em outra tabela, truncar e inserir de volta assim que terminar a reconfiguração da tabela (ou criar uma nova tabela com as colunas corretas, inserir em, então renomear depois de descartar?) Não acho que isso possa ser melhorado, a menos que você queira excluir de onde não é igual a, mas a inserção deve ser mais rápida (precisa ser testada para ter certeza)
Você pode copiar os dados da sua tabela para um arquivo usando BCP (cópia em massa), truncar a tabela, remover o PK antigo, criar um novo PK (apenas 4 colunas), importar dados do arquivo bcp usando um script (como o script de Eric) que ignora o duplicatas.
Para muitas linhas, nada pode superar a cópia em massa :).