Вот быстрый способ просмотреть строки, чтобы увидеть, изменился ли ЛЮБОЙ столбец, прежде чем принимать решение о запуске содержимого триггера. Это может быть полезно, например, когда вы хотите написать запись истории, но не хотите делать это, если ничего не изменилось.
Мы используем это все время в процессах импорта ETL, где мы можем повторно импортировать данные, но если ничего не изменилось в исходном файле, мы не хотим создавать новую запись истории.
CREATE TRIGGER [dbo].[TR_my_table_create_history]
ON [dbo].[my_table] FOR UPDATE AS
BEGIN
--
-- Insert the old data row if any column data changed
--
INSERT INTO [my_table_history]
SELECT d.*
FROM deleted d
INNER JOIN inserted i ON i.[id] = d.[id]
--
-- Use INTERSECT to see if anything REALLY changed
--
WHERE NOT EXISTS( SELECT i.* INTERSECT SELECT d.* )
END
Обратите внимание, что этот конкретный триггер предполагает, что ваша исходная таблица (та, которая вызывает триггер) и таблица истории имеют идентичные макеты столбцов.