DML トリガーの作成
このトピックでは、SQL Server Management Studio および Transact-SQL の CREATE TRIGGER ステートメントを使用して、Transact-SQL DML トリガーを作成する方法について説明します。
作業を開始する準備
制限事項と制約事項
DML トリガーの作成に関する制限事項と制約事項の一覧については、「CREATE TRIGGER (Transact-SQL)」を参照してください。
権限
トリガーを作成するテーブルまたはビューに対する ALTER 権限が必要です。
DML トリガーの作成方法
次のいずれかを使用します。
SQL Server Management Studio
Transact-SQL
SQL Server Management Studio の使用
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[データベース]、 AdventureWorks2012 データベース、[テーブル]、Purchasing.PurchaseOrderHeader テーブルの順に展開します。
[トリガー] を右クリックし、[新しいトリガー] をクリックします。
[クエリ] メニューの [テンプレート パラメーターの値の指定] をクリックします。 または、Ctrl キーと Shift キーを押しながら M キーを押して、[テンプレート パラメーターの値の指定] ダイアログ ボックスを開きます。
[テンプレート パラメーターの値の指定] ダイアログ ボックスで、各パラメーターに次の値を入力します。
パラメーター
値
Author
Your name
Create Date
Today's date
説明
ベンダーへの新しい購買発注の挿入を許可する前に、ベンダーの信用格付けを確認します。
Schema_Name
Purchasing
Trigger_Name
NewPODetail2
Table_Name
PurchaseOrderDetail
Data_Modification_Statement
一覧から UPDATE と DELETE を削除します。
[OK] をクリックします。
クエリ エディターで、コメント -- 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 の使用
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[ファイル] メニューの [新しいクエリ] をクリックします。
次の例をコピーしてクエリ ウィンドウに貼り付け、[実行] をクリックします。 この例は、上と同じ 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;
[先頭に戻る]