Триггеры DML в образце базы данных AdventureWorks

В этом разделе приводится несколько примеров триггеров DML, включенных в образец базы данных База данных AdventureWorks2008R2. Эти триггеры DML предназначены для форсированного применения бизнес-правил Adventure Works Cycles и для обеспечения целостности ее данных.

Для просмотра текста каждого триггера в среде SQL Server Management Studio

  1. В обозревателе объектов найдите таблицу, для которой определен данный триггер, и откройте папку Триггеры.

  2. Правой клавишей мыши щелкните нужный триггер и затем щелкните элемент Создать сценарий для триггера.

Настройка поля после обновления

Триггер DML uSalesOrderHeader

Таблица Sales.SalesOrderHeader содержит столбец RevisionNumber, в котором фиксируются данные о том, сколько раз изменялось содержимое той или иной строки за исключением поля Status. Триггер DML uSalesOrderHeader увеличивает значение поля RevisionNumber на единицу или, если это значение равно NULL, устанавливает его равным единице после обновления.

Триггер DML uPurchaseOrderHeader применяет те же действия к таблице Purchasing.PurchaseOrderHeader, а триггер DML uSalesOrderHeader — к таблице Sales.SalesOrderHeader.

Заполнение таблицы после вставки с последующей настройкой поля в другой таблице

Триггеры DML iPurchaseOrderDetail и uPurchaseOrderHeader

При вводе данных в таблицу PurchaseOrderDetail триггер DML iPurchaseOrderDetail одновременно вносит часть введенных данных в таблицу Production.TransactionHistory. Поскольку многострочные объекты в таблице PurchaseOrderDetail составляют в таблице PurchaseOrderHeader один заказ на покупку, поле Subtotal таблицы PurchaseOrderHeader должно обновляться при вставке данных в таблицу PurchaseOrderDetail. Триггер iPurchaseOrderDetail статистически обрабатывает поле LineTotal таблицы PurchaseOrderDetail для конкретного заказа на продажу и вводит в поле Subtotal таблицы PurchaseOrderHeader полученное значение.

Следует отметить, что, когда триггер DML выполняет обновление таблицы Purchasing.PurchaseOrderHeader, это действие приводит к срабатыванию триггера обновления uPurchaseOrderHeader, существующего в таблице Purchasing.PurchaseOrderHeader. Дополнительные сведения о триггерах, вызывающих срабатывание других триггеров, см. в разделе Использование вложенных триггеров.

Применительно к таблицам TransactionHistory и PurchaseOrderHeader триггер DML uPurchaseOrderDetail выполняет те же действия, что и триггер iPurchaseOrderDetail, однако первый триггер выполняет эти действия в ситуации, когда таблица PurchaseOrderDetail обновляется, а не получает вставку.

Триггеры DML iWorkOrder и uWorkOrder таблицы Production.WorkOrder вставляют данные только в таблицу TransactionHistory.

См. также

Основные понятия