トリガは特殊なクラスのストアド プロシージャであり、テーブルまたはビューに対して UPDATE、INSERT、または
DELETE の各ステートメントが実行されたときに自動的に実行されます。
テーブルは複数のトリガを持つことができます。CREATE TRIGGER ステートメントを FOR UPDATE、FOR
INSERT、または FOR DELETE の各句と共に定義し、特定のクラスのデータ修正操作によってトリガを起動できます。
FOR UPDATE を指定した場合、IF UPDATE (column_name)
句を使用して、特定の列に影響を及ぼす更新によってトリガを起動できます。
トリガを使用すると、会社での処理を自動化できます。在庫管理システムでは、更新トリガで在庫レベルが再発注点に到達したことを検出し、自動的に供給元への注文を生成できます。工場内の工程を記録するデータベースでは、工程が定義された安全限度を超えたときに、トリガによってオペレータに電子メールやポケットベルで通知できます。
次のトリガは、pubs データベース内に新しいタイトルが追加されると必ず電子メールを生成します。
CREATE TRIGGER reminder
ON titles
FOR INSERT
AS
EXEC master..xp_sendmail 'MaryM',
'New title, mention in the next report to distributors.'
トリガには、ストアド プロシージャとまったく同じように、Transact-SQL
ステートメントが入っています。トリガはストアド プロシージャのように、そのトリガ内に SELECT
ステートメントがあれば、そのステートメントで生成された結果セットを返します。トリガには、パラメータを書き込むだけのステートメント以外の
SELECT ステートメントを含めないことをお勧めします。これは、ユーザーが UPDATE、INSERT、または DELETE
の各ステートメントから返される結果セットを見ることがないからです。
FOR 句を使用して、いつトリガを実行するかを指定できます。
- AFTER
トリガは、そのトリガを起動したステートメントが完了した後に実行されます。そのステートメントが制約違反や構文エラーなどのエラーで終了した場合、トリガは実行されません。AFTER
トリガはテーブルに対してのみ指定できます。ビューに対しては指定できません。個々のトリガ動作 (INSERT、UPDATE
または DELETE) に対して複数の AFTER トリガを指定できます。1 つのテーブルに対して複数の AFTER
トリガが指定されている場合は、sp_settriggerorder を使用して、どの AFTER
トリガを最初に起動し、どの AFTER トリガを最後に起動するかを定義できます。最初と最後に起動される AFTER
トリガ以外のすべての AFTER トリガが起動される順序は定義されず、この順序を制御することはできません。
SQL Server 2000 では AFTER が既定の設定です。SQL Server Version 7.0
以前のバージョンでは、すべてのトリガが AFTER トリガとして動作したため、AFTER または INSTEAD OF
を指定することはできませんでした。
- INSTEAD OF
トリガ動作の代わりにトリガが実行されます。INSTEAD OF
トリガは、テーブルにもビューにも指定できます。個々のトリガ動作 (INSERT、UPDATE または DELETE)
に対して 1 つの INSTEAD OF トリガのみを指定できます。INSTEAD OF トリガを使用して、INSERT
ステートメントおよび UPDATE
ステートメントから渡されるデータ値に対して拡張整合性チェックを実行することができます。INSTEAD OF
トリガを使用すると、通常は更新をサポートしないビューを更新可能にする動作を指定することができます