次の方法で共有


DML トリガーの作成

このトピックでは、SQL Server Management Studio および Transact-SQL の CREATE TRIGGER ステートメントを使用して、Transact-SQL DML トリガーを作成する方法について説明します。

作業を開始する準備

制限事項と制約事項

DML トリガーの作成に関する制限事項と制約事項の一覧については、「CREATE TRIGGER (Transact-SQL)」を参照してください。

権限

トリガーを作成するテーブルまたはビューに対する ALTER 権限が必要です。

DML トリガーの作成方法

次のいずれかを使用します。

  • SQL Server Management Studio

  • Transact-SQL

SQL Server Management Studio の使用

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

  2. [データベース]、 AdventureWorks2012 データベース、[テーブル]Purchasing.PurchaseOrderHeader テーブルの順に展開します。

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

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

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

    パラメーター

    Author

    Your name

    Create Date

    Today's date

    説明

    ベンダーへの新しい購買発注の挿入を許可する前に、ベンダーの信用格付けを確認します。

    Schema_Name

    Purchasing

    Trigger_Name

    NewPODetail2

    Table_Name

    PurchaseOrderDetail

    Data_Modification_Statement

    一覧から UPDATE と DELETE を削除します。

  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 トリガーを作成します。

    -- 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;
    

[先頭に戻る]