「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。 目次 †概要 †トリガには、DMLトリガとDDLトリガがある。
DMLトリガ †検証 †
メッセージを登録 †EXEC sp_addmessage @msgnum = 50001, @severity = 10, @msgtext = 'Trigger Executed', @lang = 'us_english', @with_log = true, --@replace= 'replace' トリガを登録(待機とログ出力) †CREATE TRIGGER trNotifyCustomerUpdate ON Customers FOR INSERT, UPDATE, DELETE AS BEGIN WAITFOR DELAY '00:01:00'; RAISERROR (50001,10,10); END トリガを起動 †UPDATE Customers SET Country = 'USA' WHERE Country = 'USA' 結果確認 †(13 行処理されました) 非同期実行 †トリガではなく、イベント通知を使用します。
複数行更新された後の処理 †複数行更新された後の処理については注意が必要。 DML トリガの複数行に関する注意点
insertedテーブルとdeletedテーブル †
詳しくは、以下のページを参照のこと。 inserted テーブルと deleted テーブルの使用 insertedテーブルの使用例 †-- 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 -- 1行の時はLineTotalをそのまま -- Purchasing.PurchaseOrderHeaderに足し込む。 UPDATE Purchasing.PurchaseOrderHeader SET SubTotal = SubTotal + LineTotal FROM inserted WHERE PurchaseOrderHeader.PurchaseOrderID = inserted.PurchaseOrderID END ELSE BEGIN -- 複数行の時は -- inserted.LineTotalを合計して -- Purchasing.PurchaseOrderHeaderに足し込む。 -- WHERE句にはIN句にinserted.PurchaseOrderIDを指定し順次処理する。 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 Tags: :データアクセス, :SQL Server |