Nie będziesz w stanie wykonać dokładnej edycji za pomocą SQL. Potrzebujesz algorytmu takiego jak uniksowy diff na plikach (co działa na poziomie wiersza). Na poziomie postaci algorytm byłby pewną odmianą odległość Levenshtein
. Jeśli diff spełnia Twoje potrzeby, możesz go pobrać, napisać przechowywaną procedurę, aby go wywołać, a następnie użyć go w bazie danych. To byłoby dość drogie.
Część twojego pytania o utrzymanie różnych wersji jest znacznie łatwiejsza. Dodałbym dwie kolumny EffDate i EndDate na każdym rekordzie. Najnowszą wersję można pobrać, szukając EndDate is NULL i znajdź wersję aktywną w danym momencie. Merge jest ogólnie przydatne do utrzymywania takiej tabeli.