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