次の方法で共有


DML トリガーを作成する

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

開始する前に

制限事項と制約条件

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

権限

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

DML トリガーを作成する方法

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

SQL Server Management Studio の使用

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

  2. [ データベース] を展開し、 AdventureWorks2012 データベースを展開し、[ テーブル] を展開してから、 Purchaseing.PurchaseOrderHeader テーブルを展開します。

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

  4. [クエリ] メニューの [テンプレート パラメーターの値の指定] をクリックします。 または、(Ctrl +Shift-M) キーを押して、[ テンプレート パラメーターの値の指定 ] ダイアログ ボックスを開く方法があります。

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

    パラメーター 価値
    著者 お名前 *
    日付の作成 今日の日付
    説明 仕入先との新しい発注書の挿入を許可する前に、仕入先与信評価を確認します。
    Schema_Name 購入
    トリガー名 NewPODetail2
    テーブル名 発注書詳細
    データ修正ステートメント 一覧から 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;