Нотатки про програмування, музику, подорожі та плівку
Про мене  •  Список нотаток  •  Плівка

Изучение SQL: триггеры

Сегодня на работе была задача по созданию триггеров на таблицу БД.
Суть заключалась в том, что надо сделать механизм, при котором update/insert в одну таблицу, переносил данные в другую таблицу, а предыдущую удалял.

Так как я раньше не работал с триггерами, пришлось немного почитать и сделать для себя эту заметку.

Типы триггеров.

  1. AFTER — выполняется после выполнения действия. Определяется только для таблиц. Можно определять несколько действий через запятую.
  2. INSTEAD OF — выполняется вместо действия (то есть по сути действие — добавление, изменение или удаление — вообще не выполняется). Определяется для таблиц и представлений. Можно определять только одно действие.

Создание простого триггера

CREATE TRIGGER User_Insert_Update_TR
ON Users
AFTER INSERT, UPDATE -- сработает как для INSERT так и для UPDATE скриптов.
AS
BEGIN
    INSERT UsersLog (UserId)
    SELECT Id FROM inserted
END

Управление триггером

Удаление

DROP TRIGGER User_Insert_Update_TR

Отключение

DISABLE TRIGGER User_Insert_Update_TR ON Users

Включение

ENABLE TRIGGER User_Insert_Update_TR ON Users

Работа со значениями запроса

Внутри каждого триггера можно работать с данными, которые изменяет тот или иной триггер.

  1. Добавление — виртуальная табличка INSERTED.
  2. Удаление — виртуальная табличка DELETED.
  3. Изменение — содержит 2 таблички.
    INSERTED хранит строки после обновления.
    DELETED до обновления.

INSTEAD OF

Данный тип триггеров работает вместо операций с данными. Также его можно применять не только для таблиц но и для представлений.

Пример
Данный триггер не будет удалять данный из таблицы Users, он просто деактивирует запись

CREATE TRIGGER User_Delete_TR
ON Users
INSTED OF DELETE
AS
BEGIN
    UPDATE Users
    SET IsActive = 0
    WHERE Id = (SELECT Id FROM deleted)
END
Надіслати
Поділитись