次の方法で共有


DML トリガーを作成する

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

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

  2. [ データベース] を展開し、 AdventureWorks2022 データベースを展開し、[ テーブル] を展開して、テーブル 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;