Сохранение истории изменений в поле XML в SQL Server 2008 - PullRequest
0 голосов
/ 03 марта 2009

Я работал над несколькими приложениями, которые сохраняли данные XML в базе данных. На сегодняшний день все они просто переписали текущее содержимое XML новым содержимым XML.

Я хотел бы сохранить изменения в XML в базе данных, но не перезаписывать то, что в данный момент находится в БД.

Кроме создания новых строк для изменений и оставления старых строк без изменений, какие еще варианты я могу использовать?

Я думал о том, чтобы просто сохранить различия как фактические различия текста, что не всегда работает для XML.

Я схожу с ума от того, что даже хочу этого?

1 Ответ

1 голос
/ 03 марта 2009

Возможно, вы захотите добавить таблицу аудита, чтобы расположиться рядом с таблицей данных.

Он будет содержать только те столбцы, которые вы хотите отслеживать в истории, вместе со столбцом datetime (для записи даты изменения), и обычно вам также нужна некоторая информация о пользователе (т. Е. Извлечение зарегистрированного пользователя из соединения укажите имя пользователя в вашей вставке / обновлении).

Затем создайте триггер обновления в своей таблице данных и вставьте новые строки в свою таблицу аудита из удаленной псевдотаблицы. Он будет содержать данные до обновления, если вы выполняете обновление, поскольку обновление действительно является удалением и вставкой.

Существует также решение более общего назначения, в котором предлагается использовать SQL CLR для абстрагирования от реализации уникальной таблицы аудита и триггера для каждой таблицы данных, которую вы хотите проверить: http://www.sqljunkies.ddj.com/Article/4CD01686-5178-490C-A90A-5AEEF5E35915.scuk

...