Создание триггеров DML

В этом разделе описано, как создать триггер DML Transact-SQL с помощью Среда SQL Server Management Studio или инструкции Transact-SQL CREATE TRIGGER.

Перед началом

Ограничения

Список ограничений, связанных с созданием триггеров DML, см. в разделе CREATE TRIGGER (Transact-SQL).

Разрешения

Требует разрешения ALTER на таблицу или представление, на которых создается триггер.

Как создать триггер DML

Можно использовать один из следующих способов:

  • Среда SQL Server Management Studio

  • Transact-SQL

Использование среды SQL Server Management Studio

  1. В обозревателе объектов подключитесь к экземпляру Компонент Database Engine и разверните его.

  2. Разверните узел Базы данных, разверните базу данных AdventureWorks2012 , разверните узел Таблицы, а затем таблицу Purchasing.PurchaseOrderHeader.

  3. Правой кнопкой мыши щелкните Триггеры, а затем выберите пункт Создать триггер.

  4. В меню Запрос выберите пункт Задать значения для параметров шаблона. Можно также нажать (Ctrl-Shift-M), чтобы открыть диалоговое окно Задать значения для параметров шаблона.

  5. В диалоговом окне Задание значений для параметров шаблона введите для показанных параметров следующие значения.

    Параметр

    Значение

    Автор

    Your name

    Дата создания

    Today's date

    Описание

    Проверяет кредитоспособность поставщика, прежде чем позволить вставить новый заказ на покупку от этого поставщика.

    Имя_схемы

    Purchasing

    Имя_триггера

    NewPODetail2

    Имя_таблицы

    PurchaseOrderDetail

    Команда_изменения_данных

    Удаление инструкций UPDATE и DELETE из списка.

  6. Нажмите кнопку ОК.

  7. В редакторе запросов замените комментарий -- Insert statements for trigger here следующей инструкцией:

    IF @@ROWCOUNT = 1
    BEGIN
       UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + LineTotal
       FROM inserted
       WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID
    
    END
    ELSE
    BEGIN
          UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + 
          (SELECT SUM(LineTotal)
          FROM inserted
          WHERE PurchaseOrderHeader.PurchaseOrderID
           = inserted.PurchaseOrderID)
       WHERE PurchaseOrderHeader.PurchaseOrderID IN
          (SELECT PurchaseOrderID FROM inserted)
    END;
    
  8. Чтобы проверить синтаксис, в меню Запрос выберите пункт Синтаксический анализ. Если появится сообщение об ошибке, сравните эту инструкцию с вышеуказанной информацией, внесите исправления и повторите этот шаг.

  9. Чтобы создать триггер DML, в меню Запрос нажмите Выполнить. Триггер DML создается как объект в базе данных.

  10. Чтобы увидеть этот триггер DML в обозревателе объектов, щелкните правой кнопкой мыши Триггеры и выберите Обновить.

[В начало]

Использование Transact-SQL

  1. В обозревателе объектов подключитесь к экземпляру Компонент Database Engine и разверните его.

  2. В меню Файл выберите пункт Создать запрос.

  3. Вставьте следующий пример в окно запроса и нажмите Выполнить. В этом примере создается такой же хранимый триггер DML, как показано выше.

    -- Trigger valid for multirow and single row inserts
    -- and optimal for single row inserts.
    USE AdventureWorks2012;
    GO
    CREATE TRIGGER NewPODetail3
    ON Purchasing.PurchaseOrderDetail
    FOR INSERT AS
    IF @@ROWCOUNT = 1
    BEGIN
       UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + LineTotal
       FROM inserted
       WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID
    
    END
    ELSE
    BEGIN
          UPDATE Purchasing.PurchaseOrderHeader
       SET SubTotal = SubTotal + 
          (SELECT SUM(LineTotal)
          FROM inserted
          WHERE PurchaseOrderHeader.PurchaseOrderID
           = inserted.PurchaseOrderID)
       WHERE PurchaseOrderHeader.PurchaseOrderID IN
          (SELECT PurchaseOrderID FROM inserted)
    END;
    

[В начало]