У меня есть триггер после, реализованный в сборке SQLCLR.В нем я хотел бы знать, какие столбцы действительно обновлены (и их значения были изменены).
К сожалению, SqlContext.TriggerContext.IsUpdatedColumn возвращает значение true, даже если значение столбца остается неизменным.Я думаю, это просто потому, что SQL-запрос, подготовленный не очень умным серверным приложением, переписывает все столбцы, даже если некоторые из них не были изменены пользователем.
Вторая проблема - это некоторые изстолбцы имеют тип ntext, поэтому я даже не могу выбрать их из псевдо таблицы INSERTED (MS SQL Server не допускает поля SELECT, которые имеют тип ntext из INSERTED).Вот почему теперь я ВЫБИРАЮ изменил строки с помощью следующего запроса:
SELECT * FROM [dbo].[MyTable] WHERE [id] IN (SELECT [id] FROM INSERTED)
Что мне нужно сделать, чтобы узнать, какие столбцы не только обновляются, но изменяются?
Теперь у меня естьпростая идея: создать еще один триггер ДО и сохранить обновленные строки изнутри.Затем, когда триггер AFTER выполняется, сравните значения столбца.Эта идея - лучшее, что я могу сделать?Если это так, что является лучшим местом для хранения измененных строк между триггерами ДО и ПОСЛЕ?Временная таблица будет удалена до выполнения триггера AFTER, поскольку я закрываю соединение с контекстом (может быть, просто не закрываю?).