Опубликован: 11.12.2006 | Уровень: специалист | Доступ: платный
Лекция 22:

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

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

В этом примере мы создадим триггер типа INSERT (триггер, который активизируется при выполнении оператора INSERT ) по таблице sales. Этот триггер при вставке строки в таблицу sales будет модифицировать колонку ytd_sales в таблице titles добавляя в нее значение, которое было помещено в колонку qty таблицы sales. Этот триггер запрашивает таблицу inserted, чтобы получить значение qty, которое было помещено в таблицу sales. Мы включим в этот запрос оператор SELECT *, с помощью которого увидим, что содержит таблица inserted. Ниже приводится T-SQL-текст для этого триггера:

USE pubs
GO
IF EXISTS   (SELECT     name
                 FROM       sysobjects
                 WHERE      name = "Update_ytd_sales" AND
                              type = "TR")
DROP TRIGGER Update_ytd_sales
GO
CREATE TRIGGER Update_ytd_sales
ON sales
FOR INSERT
AS
SELECT   *
FROM       inserted
UPDATE     titles
SET          ytd_sales = ytd_sales + qty
FROM       inserted
WHERE      titles.title_id = inserted.title_id
GO

Отметим, что мы использовали в операторе UPDATE предложение FROM источник_для_таблицы (FROM inserted), чтобы указать, что значение qty должно поступать из таблицы inserted. Теперь выполним следующий оператор INSERT для просмотра результатов из этого триггера:

INSERT INTO sales VALUES(7066, 1, "March 7, 2000", 100, "Net 30",
"BU1111") 
GO

Вы увидите следующие результаты. В первом наборе результатов показана строка, выбранная из таблицы inserted, и второе сообщение "1 row(s) affected" получено из оператора UPDATE.

stor_id    ord_num     ord_date              qty    payterms      title_id
----------------------------------------------------------------------------------------
7066         1          2000-03-07 00:00:00.000       100    Net 30      BU1111

(1 row(s) affected)


(1 row(s) affected)
Максим Ерохин
Максим Ерохин
Россия, г. Санкт-Петербург
Татьяна Лубинец
Татьяна Лубинец
Россия, Уфа, Уфимский авиационный институт, 1987