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
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
@d-stream
Готовые решения - не подаю, но...
inserted - псевдотаблица вставленных значений вместо удаленных deleted

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

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

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

Войти через центр авторизации
Похожие вопросы