適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
この記事では、SQL Server Management Studio または Transact-SQL CREATE TRIGGER
ステートメントを使用して、Transact-SQL データ操作言語 (DML) トリガーを作成する方法について説明します。
この記事のコード サンプルでは、AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクト ホーム ページからダウンロードできます。
制限事項
DML トリガーの作成に関連する制限事項と制限の一覧については、「 CREATE TRIGGER」を参照してください。
アクセス許可
トリガー ALTER
作成するテーブルまたはビューに対するアクセス許可が必要です。
DML トリガーを作成する方法
次の方法があります。
SQL Server Management Studio を使用します。
オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。
[ データベース] を展開し、
AdventureWorks2022
データベースを展開し、[ テーブル] を展開して、テーブルPurchasing.PurchaseOrderHeader
を展開します。[トリガー]を右クリックし、 [新しいトリガー]をクリックします。
[ クエリ ] メニューの [ テンプレート パラメーターの値の指定] を選択します。 または、Ctrl キーと Shift キーを押しながら M キーを押して、 [テンプレート パラメーターの値の指定] ダイアログ ボックスを開きます。
[テンプレート パラメーターの値の指定] ダイアログ ボックスで、各パラメーターに次の値を入力します。
パラメーター 値 Author 名前 日付の作成 今日の日付 説明 ベンダーへの新しい購買発注の挿入を許可する前に、ベンダーの信用格付けを確認します。 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 トリガーを作成します。 トリガーは複数行挿入と単一行挿入に対して有効であり、1 行の挿入に最適です。
USE AdventureWorks2022; 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;