Няма да можете да правите точното редактиране с помощта на SQL. Имате нужда от алгоритъм като Unix diff върху файлове (което работи на ниво линия). На ниво знаци алгоритъмът би бил някаква вариация на разстоянието на Левенщайн
. Ако diff отговаря на вашите нужди, можете да го изтеглите, да напишете съхранена процедура, за да го извикате и след това да го използвате в базата данни. Това би било доста скъпо.
Частта от вашия въпрос за поддържане на различните версии е много по-лесна. Бих добавил две колони EffDate и EndDate на всеки запис. Можете да получите най-новата версия, като потърсите EndDate is NULL и намерете версията активна във всеки един момент. Merge обикновено е полезно за поддържане на такава таблица.