Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Логи на изменение полей типа Text  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1239
Доброго времени суток!
Есть небольшая система (некое дополнение к существующей базе), функционирует под MS SQL 2008
при ее проектировании очень часто был использован тип Text. Теперь мне надо организовать логирование изменений, т.е. в триггере мне надо понять изменилось ли поле и записать информацию, кто его поменял. Все это нормально делается при помощи сравнения таблиц inserted и deleted, для всех полей кроме полей типа Text. Их довольно много, и мне важно по ним знать реально ли они менялись, или были перезаписаны тем же значением. Сходу увидел два выхода :

1. Писать в лог все, потом анализировать лог.
2. При записи лезть в тот же лог и сравнивать, не равно ли значение предыдущему

Какие еще есть варианты?



P.S. Правильно ли я понял из своих экспериментов, что при использовании COLUMNS_UPDATED(), поля, которые были проапдейчены тем же самым значением, будут в битовой маске представлены как измененные?
5 ноя 15, 17:26    [18374929]     Ответить | Цитировать Сообщить модератору
 Re: Логи на изменение полей типа Text  [new]
Glory
Member

Откуда:
Сообщений: 104751
denis_viktorovich
для всех полей кроме полей типа Text.


Потому что надо в INSTEAD OF триггере их логировать
5 ноя 15, 17:32    [18374957]     Ответить | Цитировать Сообщить модератору
 Re: Логи на изменение полей типа Text  [new]
denis_viktorovich
Member

Откуда: Екб
Сообщений: 1239
Ясно, связкой по ключу с самой табличкой до и после update?

из минусов только то , что при добавлении полей, надо менять триггер в части апдейта.
5 ноя 15, 17:39    [18374981]     Ответить | Цитировать Сообщить модератору
 Re: Логи на изменение полей типа Text  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8815
denis_viktorovich,

COLUMNS_UPDATED() отображает только факт обновления без сравнения содержимого.

сравнить можно, преобразованием типа TEXT к VARCHAR(max). В справке есть об этом.
5 ноя 15, 17:45    [18375006]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить