このトピックでは、SQL Server Management Studio を使用し、Transact-SQL CREATE TRIGGER ステートメントを使用して、Transact-SQL DML トリガーを作成する方法について説明します。
開始する前に
制限事項と制約条件
DML トリガーの作成に関連する制限事項と制限の一覧については、 CREATE TRIGGER (Transact-SQL) を参照してください。
権限
トリガーが作成されているテーブルまたはビューに対する ALTER 権限が必要です。
DML トリガーを作成する方法
次のいずれかを使用します。
SQL Server Management Studio の使用
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[ データベース] を展開し、 AdventureWorks2012 データベースを展開し、[ テーブル] を展開してから、 Purchaseing.PurchaseOrderHeader テーブルを展開します。
[トリガー] を右クリックし、[新しいトリガー] を選択します。
[クエリ] メニューの [テンプレート パラメーターの値の指定] をクリックします。 または、(Ctrl +Shift-M) キーを押して、[ テンプレート パラメーターの値の指定 ] ダイアログ ボックスを開く方法があります。
[ テンプレート パラメーターの値の指定] ダイアログ ボックスで、表示されるパラメーターに次の値を入力します。
パラメーター 価値 著者 お名前 * 日付の作成 今日の日付 説明 仕入先との新しい発注書の挿入を許可する前に、仕入先与信評価を確認します。 Schema_Name 購入 トリガー名 NewPODetail2 テーブル名 発注書詳細 データ修正ステートメント 一覧から 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;