Задать вопрос
ebanytiu_lis
@ebanytiu_lis

Триггеры на MSSQL?

Окей... Допустим у нас выполняется запрос UPDATE users SET n = n + 123123 WHERE id = 581;
Как мне получить из этого запроса 123123 и 581 и использовать в триггере?
Можно пример, собсна?
Или просто объясните мне этот код построчно, пожалуйста, думаю, здесь есть решение моего вопроса:
USE SampleDb;

/* Таблица AuditBudget используется в качестве 
журнала логов действий в таблице Project */
GO
CREATE TABLE AuditBudget (
    ProjectNumber CHAR(4) NULL,
    UserName CHAR(16) NULL,
    Date DATETIME NULL,
    BudgetOld FLOAT NULL,
    BudgetNew FLOAT NULL
);

GO
CREATE TRIGGER trigger_ModifyBudget
    ON Project AFTER UPDATE
    AS IF UPDATE(budget)
BEGIN
    DECLARE @budgetOld FLOAT
    DECLARE @budgetNew FLOAT
    DECLARE @projectNumber CHAR(4)

    SELECT @budgetOld = (SELECT Budget FROM deleted)
    SELECT @budgetNew = (SELECT Budget FROM inserted)
    SELECT @projectNumber = (SELECT Number FROM deleted)

    INSERT INTO AuditBudget VALUES
        (@projectNumber, USER_NAME(), GETDATE(), @budgetOld, @budgetNew)
END
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
inserted - псевдотаблица вставленных значений вместо удаленных deleted

то бишь в deleted находятся значения что были, а в inserted - новые

в случае, когда не стрелял себе в ногу и primary key присутствует - по нему можно реально идентифицировать что именно менялось, с чего и на что.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@edb
SQL
и обратите внимание, что приведенный код будет логировать только одну запись, даже если запросом DML затронуто много записей.
Ответ написан
Ваш ответ на вопрос

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

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