AdventureWorks サンプル データベースの DML トリガ
このトピックでは、AdventureWorks2008R2 サンプル データベースに付属している DML トリガの例の一部について説明します。付属の DML トリガは、Adventure Works Cycles のビジネス ルールを実施し、データの整合性を保護するためにデザインされています。
SQL Server Management Studio で各トリガのテキストを表示するには
オブジェクト エクスプローラでトリガが定義されているテーブルに移動し、[トリガ] フォルダを展開します。
任意のトリガを右クリックし、[トリガをスクリプト化] をクリックします。
更新後のフィールドの設定
uSalesOrderHeader DML トリガ
テーブル Sales.SalesOrderHeader には、Status フィールドを除く特定の行の更新回数を反映する RevisionNumber 列があります。更新が行われると、DML トリガ uSalesOrderHeader によって RevisionNumber フィールドが 1 つずつ加算されるか、NULL の場合は 1 に設定されます。
uPurchaseOrderHeader DML トリガはテーブル Purchasing.PurchaseOrderHeader に対し、uSalesOrderHeader DML トリガがテーブル Sales.SalesOrderHeader に対して実行するのと同じアクションを実行します。
挿入後のテーブルへのデータ格納、および別テーブルのフィールド設定
iPurchaseOrderDetail DML トリガおよび uPurchaseOrderHeader DML トリガ
PurchaseOrderDetail テーブルにデータが挿入されると、挿入されたデータの一部が Production.TransactionHistory テーブルにも DML トリガ iPurchaseOrderDetail によって挿入されます。PurchaseOrderHeader テーブルの 1 つの発注は PurchaseOrderDetail の複数の品目で構成されているので、PurchaseOrderDetail で挿入を行った場合は PurchaseOrderHeader の Subtotal フィールドを更新する必要があります。iPurchaseOrderDetail トリガは、特定の受注について PurchaseOrderDetail の LineTotal フィールドを集計し、その集計結果を PurchaseOrderHeader の Subtotal フィールドに設定します。
DML トリガによって Purchasing.PurchaseOrderHeader が更新されると、Purchasing.PurchaseOrderHeader テーブルにある uPurchaseOrderHeader 更新トリガが起動します。他のトリガを起動させるトリガの詳細については、「入れ子になったトリガーの使用」を参照してください。
iPurchaseOrderDetail により TransactionHistory テーブルおよび PurchaseOrderHeader テーブルに対して行われるアクションと同じアクションが、DML トリガ uPurchaseOrderDetail によって、挿入を受け取ったときではなく PurchaseOrderDetail テーブルが更新されたときに行われます。
テーブル Production.WorkOrder の DML トリガ iWorkOrder および uWorkOrder によってデータが挿入されるのは TransactionHistory テーブルのみです。