Articles

特定の値の更新後のSQL Serverトリガー

By:Dallas Snider|Updated:2015-09-10|Comments(6)|Related:More>Triggers

Problem

列の値が特定の値に更新されたときに実行されるSQL Serverトリ どうすればこれを行うことができますか?このヒントでは、列の値をspecificvalueに更新した後に実行されるSQLServerトリガーを作成するT-SQLステートメントを作成する方法を示します。

下の画像では、pkIDという名前の主キー列、OrderApprovalDateTimeという名前の日付列、OrderStatusという名前のvarchar列を持つtbltriggertestという名前のテーブルの例を作成しています。 OrderApprovalDateTimeがNULLに設定され、OrderStatusが”Pending”に設定された3つのテストレコードをテーブルに入力します。

テーブルを作成し、サンプルデータを挿入

この例では、OrderStatusが”Approved”に更新された後、getdate()関数によって提供された現在の日付をトリガーに設定します。 このトリガーを作成するためのT-SQLを以下に示します。 更新された行のみが影響を受けるように、挿入されたテーブルにINNER JOINを含めることは非常に重要です。 句WHERE OrderStatus=’Approved’を単独で使用して更新された行を制限すると、実際にはOrderstatus値がApprovedのすべての行が同時に更新されます。トリガーをテストするには、T-SQL UPDATE文を実行して、テーブルの最初の行(pkID=1)のOrderStatus値を「Approved」に設定します。 T-SQL UPDATEコマンドの後、t-SQL SELECTクエリを実行して、トリガーが正しく実行されていることを確認します。 UPDATE文とSELECT文からの出力を以下に示します。

トリガーのテストに成功しました

最初の行だけがOrderApprovalDateTimeを現在の日付に設定していたことに注意してください。 ただし、正しい行数が更新されていることを確認するために、2番目のテストを実行する必要があります。 2番目のテストでは、T-SQL UPDATE文を実行して、テーブルの2番目の行(pkID=2)のOrderStatus値を「Approved」に設定します。 テーブル内のすべてのレコードを選択した後、2番目の行のOrderApprovalDateTimeが最初の行のOrderApprovalDateTimeと等しくないことに注意してください。 繰り返しますが、これは私たちの望ましい行動であり、すべてがうまく表示されます。

トリガーをもう一度テストします

このヒントの完全なコードは下のボックスにあります。P>

use MSSQLTipsgocreate table tblTriggerTest( pkID integer Identity(1,1) primary key, OrderApprovalDateTime datetime, OrderStatus varchar(20))insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')insert into tblTriggerTest values (NULL, 'Pending')select * from tblTriggerTestgocreate trigger trTriggerTest on tblTriggerTestafter updateasbegin set nocount on; update tblTriggerTest set OrderApprovalDateTime=getdate() from tblTriggerTest t inner join inserted i on t.pkID=i.pkID and i.OrderStatus='Approved'endgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=1goselect * from tblTriggerTestgoupdate tblTriggerTest set OrderStatus='Approved' where pkID=2goselect * from tblTriggerTestgo
次の手順

内部結合を変更したり、テーブルに列を追加してトリガーしたときに何が起こるかを調べるのに数分かかります。

また、SQL Serverのtips ontriggersをチェックしてくださいMSSQLTips.com…..

  • SQL Serverでトリガーの起動順序を強制する
  • sql Serverテーブル内のすべての行の偶発的な更新または削除コマンドを防ぐ
  • Sql Serverでトリガーが無効または有効になっている場合の監査

最終更新日:2015-09-10

スクリプトの取得

スクリプトの取得

次のヒントボタン

著者について
mssqltips著者ダラススナイダー博士。 Dallas Sniderは、西フロリダ大学のコンピュータサイエンス部門の助教授であり、18年以上のSQL経験を持っています。
すべての私のヒントを表示
関連リソース

  • より多くのデータベース開発者のヒント。..