Você não poderá fazer a edição exata usando SQL. Você precisa de um algoritmo como o Unix
diff
em arquivos (que funciona no nível da linha). No nível do caractere, o algoritmo seria alguma variação da distância de Levenshtein
. Se diff
atende às suas necessidades, você pode baixá-lo, escrever um procedimento armazenado para chamá-lo e usá-lo no banco de dados. Isso seria bastante caro. A parte da sua questão de manter as diferentes versões é muito mais fácil. Eu adicionaria duas colunas
EffDate
e EndDate
em cada registro. Você pode obter a versão mais recente procurando por EndDate is NULL
e encontre a versão ativa a qualquer momento. Merge
geralmente é útil para manter essa tabela.