@kill94

Как выводить старое и новое значение?

нужно в триггере update получить старое и новое значение и записать в другую таблицу.
знаю что эти значения можно брать из таблиц inserted и deleted, но как узнать какие именно поля изменились через columns_updated (индекс каждого поля/столбца)? и что делать если число столбцов в таблице больше 8?
  • Вопрос задан
  • 355 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Noxy
увлекаюсь SQL
можно через UPDATE()
https://msdn.microsoft.com/ru-ru/library/ms187326%...

например:
-- drop table test
CREATE TABLE test (id INT IDENTITY(1,1) NOT NULL, t1 INT, t2 INT, t3 INT);
GO

INSERT INTO test (t1, t2, t3)
VALUES (1,2,0),(3,4,0),(5,6,1)
GO

CREATE TRIGGER TG_testModify ON test AFTER INSERT,UPDATE
AS
BEGIN

    IF UPDATE([t1])  
        SELECT d.t1 AS t1_old, i.t1 AS t1_new, 'Column_t1' 
              FROM INSERTED AS i
                    LEFT JOIN DELETED AS d ON i.id = d.id
        WHERE ( NULLIF(d.t1, i.t1) IS NOT NULL AND d.t1 IS NOT NULL )
               OR ( NULLIF(i.t1, d.t1) IS NOT NULL AND d.t1 IS NULL )
END
GO

UPDATE test SET t1 = 4 WHERE t3 = 0;
UPDATE test SET t1 = NULL WHERE t3 = 1;
UPDATE test SET t1 = 2 WHERE t3 = 1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы