Создание триггеров DML
В этом разделе описывается создание триггера Transact-SQL DML с помощью SQL Server Management Studio и инструкции Transact-SQL CREATE TRIGGER.
Перед началом
Ограничения
Список ограничений, связанных с созданием триггеров DML, см. в разделе CREATE TRIGGER (Transact-SQL).
Разрешения
Требует разрешения ALTER на таблицу или представление, на которых создается триггер.
Как создать триггер DML
Можно использовать один из следующих способов:
Использование среды SQL Server Management Studio
В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine и разверните его.
Разверните узлы Базы данных, Базы данных AdventureWorks2012 , Таблицы , а затем — таблицу Purchase.PurchaseOrderHeader.
Правой кнопкой мыши щелкните элемент Триггеры, а затем выберите пункт Создать триггер.
В меню Запрос выберите пункт Указать значения для параметров шаблона. Можно также нажать клавиши CTRL-SHIFT-M, чтобы открыть диалоговое окно Задание значений для параметров шаблона .
В диалоговом окне Задание значений для параметров шаблона введите для показанных параметров следующие значения.
Параметр Значение Автор Ваше имя Дата создания Сегодняшняя дата Описание Проверяет кредитоспособность поставщика, прежде чем позволить вставить новый заказ на покупку от этого поставщика. Имя_схемы Покупка Имя_триггера NewPODetail2 Имя_таблицы PurchaseOrderDetail Команда_изменения_данных Удаление инструкций UPDATE и DELETE из списка. Нажмите кнопку ОК.
В редакторе запросовзамените комментарий
-- 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;
Чтобы проверить синтаксис, в меню Запрос выберите пункт Синтаксический анализ. Если появится сообщение об ошибке, сравните эту инструкцию с вышеуказанной информацией, внесите исправления и повторите этот шаг.
Чтобы создать триггер DML, в меню Запрос нажмите Выполнить. Триггер DML создается как объект в базе данных.
Чтобы увидеть этот триггер DML в обозревателе объектов, щелкните правой кнопкой мыши элемент Триггеры и выберите пункт Обновить.
Использование Transact-SQL
В обозревателе объектовподключитесь к экземпляру компонента Компонент Database Engine и разверните его.
В меню Файл выберите пункт Создать запрос.
Скопируйте следующий пример в окно запроса и нажмите кнопку Выполнить. В этом примере создается такой же хранимый триггер 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;