У меня есть триггер после сборки SQLCCR. Внутри этого я хотел бы знать, какие столбцы были действительно обновлены (и их значения были изменены).Я хотел бы знать, какие столбцы были ДЕЙСТВИТЕЛЬНО изменены
К сожалению, 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, сравните значения столбца. Является ли эта идея лучшей, что я могу сделать? Если да, то в каком месте лучше хранить измененные строки между триггерами BEFORE и AFTER? Временная таблица будет удалена до запуска триггера AFTER, поскольку я закрываю контекстное соединение (возможно, просто не закрываю?).