У мене є тригер таблиці UPDATE та INSERT, який додає рядок до іншої таблиці. Додавати рядок потрібно лише в тому випадку, якщо один з чотирьох стовпців змінено. Я спробував використовувати IF UPDATE (col) для перевірки змін, але у нього є сліпа пляма. Це лише тестує, що якесь значення прийшло. Мені потрібно заглибитись, мені потрібно порівняти старі та нові значення, щоб побачити, чи відбулася справжня зміна. Він повинен працювати як з INSERT, так і з оновленням.
У випадку ОНОВЛЕННЯ це легко, оскільки і вставлені, і видалені таблиці мають значення, які я можу порівняти в триггері. Однак для INSERT значення має лише таблиця вставки. Оскільки мені це потрібно в одному і тому ж тригері, як я обробляю цей випадок INSERT?
Ось сценарій тригера, який я хочу змінити:
ALTER TRIGGER [dbo].[trATPerson_alter]
ON [mydb].[dbo].[AT_Person]
AFTER INSERT,UPDATE
AS
BEGIN
SET NOCOUNT ON;
-- Not all updates require a push
IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive]))
BEGIN
INSERT INTO [mydb].[dbo].[AT_Person_To_Push] (
[Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
)
SELECT [Facility],
[VendorID],
[Person_code],
[First_Name],
[Last_Name],
[JobCode],
[Alink],
[Inactive]
FROM inserted
END
END