DML トリガーを作成する

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft 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 を使用します。

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。

  2. [ データベース] を展開し、 AdventureWorks2025 データベースを展開し、[ テーブル] を展開して、テーブル Purchasing.PurchaseOrderHeaderを展開します。

  3. [トリガー]を右クリックし、 [新しいトリガー]をクリックします。

  4. [ クエリ ] メニューの [ テンプレート パラメーターの値の指定] を選択します。 または、Ctrl キーと Shift キーを押しながら M キーを押して、 [テンプレート パラメーターの値の指定] ダイアログ ボックスを開きます。

  5. [テンプレート パラメーターの値の指定] ダイアログ ボックスで、各パラメーターに次の値を入力します。

    パラメーター
    Author 名前
    日付の作成 今日の日付
    説明 ベンダーへの新しい購買発注の挿入を許可する前に、ベンダーの信用格付けを確認します。
    Schema_Name Purchasing
    Trigger_Name NewPODetail2
    Table_Name PurchaseOrderDetail
    Data_Modification_Statement リストから UPDATEDELETE を削除します。
  6. [OK] を選択.

  7. クエリ エディターで、コメント -- 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;
    
  8. 構文が有効であることを確認するには、[ クエリ ] メニューの [ 解析] を選択します。 エラー メッセージが返された場合は、ステートメントを前のコード ブロックと比較し、必要に応じて修正して、この手順を繰り返します。

  9. DML トリガーを作成するには、[ クエリ ] メニューから [ 実行] を選択します。 DML トリガーがデータベース内のオブジェクトとして作成されます。

  10. オブジェクト エクスプローラーにリストされた DML トリガーを確認するには、 [トリガー] を右クリックして [更新]を選択します。

Transact-SQL の使用

  1. オブジェクト エクスプローラーで、データベース エンジンのインスタンスに接続し、そのインスタンスを展開します。

  2. [ ファイル ] メニューの [ 新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例では、以前と同じ格納された 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;