У меня есть триггер при обновлении в SQL Server 2008. Мне нужно выполнять действие триггера, только если некоторые столбцы были изменены. Таким образом, я хотел бы проверить, что изменилось.
T-SQL предлагает конструкцию "if update (columnName)". Однако, если было обновлено много строк, и только в одной из них было изменено конкретное значение столбца, «if update ()» должно будет возвращать true. Это заставит меня выполнить действие триггера для гораздо большего количества строк, чем требуется.
Поэтому вместо использования «if update ()» я подумал, что просто присоединю виртуальные удаленные и вставленные таблицы (строки до и после обновления) и сам сравню соответствующие столбцы. Тем не менее, как я могу объединить две таблицы? Я не могу использовать первичный ключ таблицы, поскольку он может быть изменен обновлением. Единственное, о чем я могу думать, - это объединение с помощью row_number (), то есть неявное упорядочение таблиц. Это кажется очень неправильным, и я не знаю, предлагает ли SQL Server какие-либо гарантии того, что строки во вставленных упорядочены так же, как в удаленных.