Просто расширить вариант 2
Вы могли бы:
Переименуйте существующую MyTable в MyTable_V2
Перемещение столбца «Примечания» в объединенную таблицу «Примечания» (с идентификатором объединения 1: 1)
Создайте VIEW с именем MyTable, который объединяет таблицы MyTable_V2 и Notes
Создайте триггер INSTEAD OF в представлении MyTable, в котором столбец Notes сохраняется в таблице Notes (если NULL, то удаляет любую существующую строку Notes, если NOT NULL, то Insert, если не найден, в противном случае Update). Выполните соответствующее действие для таблицы MyTable_V2
Примечание: у нас были проблемы с этим, когда в MyTable_V2 есть столбец Computed (я думаю, что это была проблема, в любом случае мы сталкивались с трудностями при работе с "необычными" таблицами)
Весь новый код вставки / обновления / удаления должен быть написан так, чтобы он работал непосредственно с таблицами MyTable_V2 и Notes
Дополнительно: иметь триггер INSERT OF в журнале MyTable, факт, что он был вызван (он может сделать это минимально, ОБНОВИТЬ ранее существующую строку таблицы журнала с помощью GetDate (), только если дата существующей строки> 24 часов - так будет обновлять только один раз в день).
Когда вы больше не получаете никаких записей журнала, вы можете сбросить триггер INSTEAD OF в представлении MyTable, и теперь вы полностью совместимы с MyTable_V2!
Огромное количество хлопот для реализации, как вы и догадались.
В качестве альтернативы тралите код для всех ссылок на MyTable и измените их на MyTable_V2, поместите VIEW вместо MyTable только для SELECT и не создавайте триггер INSTEAD OF.
Мой план состоит в том, чтобы исправить все операторы Insert / Update / Delete, ссылающиеся на устаревшую MyTable. Для меня это было бы несколько проще, потому что мы используем уникальные имена для всех таблиц и столбцов в базе данных, и мы используем одни и те же имена во всем коде приложения, поэтому уверенность в том, что я нашел все экземпляры простым FIND, будет высокой.
P.S. Вариант 2 также предпочтительнее, если у вас есть какие-либо SELECT * валяется. У нас были клиенты, чья производительность приложений быстро снижалась, когда они добавляли большие столбцы Text / Blob в существующие таблицы - из-за «ленивых» операторов SELECT *. Надеюсь, что дело не в вашем магазине!