Как узнать, произошло ли обновление / вставка / удаление таблицы? - PullRequest
1 голос
/ 13 декабря 2011

У меня есть таблица с именем Table A, и я создал триггер, который обрабатывает INSERTS, UPDATES, DELETES.Теперь, чтобы обработать мои следующие шаги, я хочу знать, какое действие DML имело место.Как узнать, произошло ли обновление / вставка / удаление.

Ваши мысли, отзывы очень ценятся!

1 Ответ

2 голосов
/ 13 декабря 2011

Внутри триггера у вас есть две специальные таблицы: INSERTED и DELETED. Если строка существует только в таблице INSERTED, то выполняется операция INSERT. Аналогично, если строка существует только в таблице DELETED, то выполняется операция DELETE. Если строка существует в обеих таблицах, то произошло ОБНОВЛЕНИЕ, и таблица INSERTED содержит новые значения, а таблица DELETED содержит старые значения.

INSERTed Rows:

SELECT i.*
    FROM INSERTED i
        LEFT JOIN DELETED d
            ON i.PrimaryKey = d.PrimaryKey
    WHERE d.PrimaryKey IS NULL

УДАЛЕНО Строки:

SELECT d.*
    FROM DELETED d
        LEFT JOIN INSERTED i
            ON d.PrimaryKey = i.PrimaryKey
    WHERE i.PrimaryKey IS NULL

ОБНОВЛЕННЫЕ строки:

SELECT *
    FROM INSERTED i
        INNER JOIN DELETED d
            ON i.PrimaryKey = d.PrimaryKey
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...