Поиск…


Вступление

Триггер - это особый тип хранимой процедуры, который выполняется автоматически после возникновения события. Существует три типа триггеров: триггеры языка определения данных и триггеры языка управления данными.

Обычно он привязан к столу и срабатывает автоматически. Вы не можете явно вызвать какой-либо триггер.

Типы и классификации триггеров

В SQL Server существует две категории триггеров: триггеры DDL и триггеры DML.

Триггеры DDL запускаются в ответ на события Data Definition Language (DDL). Эти события в основном соответствуют операторам Transact-SQL, которые начинаются с ключевых слов CREATE , ALTER и DROP .

DML Triggers запускаются в ответ на события языка манипулирования данными (DML). Эти события соответствуют операторам Transact-SQL, которые начинаются с ключевых слов INSERT , UPDATE и DELETE .

Триггеры DML подразделяются на два основных типа:

  1. После триггеров (для триггеров)

    • ПОСЛЕ ВСТАВКИ Триггер.
    • ПОСЛЕ ОБНОВЛЕНИЯ Триггер.
    • ПОСЛЕ УДАЛЕНИЯ Триггера.
  2. Вместо триггеров

    • ВМЕСТО ВСТАВКИ Триггер.
    • ВМЕСТО ОБНОВЛЕНИЯ Триггер.
    • INSTEAD OF DELETE Триггер.

Триггеры DML

DML Triggers запускаются как ответ на инструкции dml ( insert , update или delete ).
Триггер dml может быть создан для адресации одного или нескольких событий dml для отдельной таблицы или представления. Это означает, что один триггер dml может обрабатывать вставку, обновление и удаление записей из определенной таблицы или представления, но в них могут обрабатываться только данные, которые изменяются в этой отдельной таблице или представлении.

DML Triggers предоставляет доступ к inserted и deleted таблицам, в которых содержится информация о данных, которые были / будут затронуты оператором вставки, обновления или удаления, которые запускали триггер.

Обратите внимание, что триггеры DML основаны на операторах, а не на основе строк. Это означает, что если оператор произвел более одной строки, вставленные или удаленные таблицы будут содержать более одной строки.

Примеры:

CREATE TRIGGER tblSomething_InsertOrUpdate ON tblSomething  
FOR INSERT
AS

    INSERT INTO tblAudit (TableName, RecordId, Action)
    SELECT 'tblSomething', Id, 'Inserted'
    FROM Inserted

GO

CREATE TRIGGER tblSomething_InsertOrUpdate ON tblSomething  
FOR UPDATE
AS

    INSERT INTO tblAudit (TableName, RecordId, Action)
    SELECT 'tblSomething', Id, 'Updated'
    FROM Inserted 

GO

CREATE TRIGGER tblSomething_InsertOrUpdate ON tblSomething  
FOR DELETE
AS

    INSERT INTO tblAudit (TableName, RecordId, Action)
    SELECT 'tblSomething', Id, 'Deleted'
    FROM Deleted

GO

Все приведенные выше примеры добавят записи в tblAudit всякий раз, когда запись добавляется, удаляется или обновляется в tblSomething.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow