FORトリガーとAFTERトリガーの違いは?


回答:


153

違いはありません。彼らは同じことをします。

CREATE TRIGGER trgTable on dbo.Table FOR INSERT,UPDATE,DELETE

と同じです

CREATE TRIGGER trgTable on dbo.Table AFTER INSERT,UPDATE,DELETE

INSTEAD OFトリガは異なり、火災の前に、その代わりに、インサートの、基礎となるテーブルに適切な値を挿入するために、ビューに使用することができます。


14
トリガーを使用したビューへの挿入に関するコメントが気に入りました。非常に役立つ情報。乾杯。
Mariusz

すみません、@ Benさん、ビューに挿入するシナリオは何ですか?ありがとう^-^
Jeancarlo Fontalvo 2017年

@ JeancarloFontalvo、1)互換性。ビューが同じままであれば、基になるテーブルは変更される可能性があります。2)アクセス制御。特定のユーザーは特定の列にのみ書き込む権限を持っている場合があります。
Ben

17

@ベンは絶対に正しいです。

これは、MSDN記事「SQL Serverトリガーの探索」です

記事の段落:

その構文は、SQL Serverの古いバージョンでも使用できます。ただし、SQL Server 2000には2種類のトリガーがあるため、FORトリガーをAFTERトリガーと呼びます。したがって、この記事の残りの部分では、AFTERまたはINSTEAD OFトリガーのいずれかを参照します。

前に見たAFTERトリガーと同様に、このトリガーはlastnameフィールドが変更されないようにします。ただし、このビジネスルールの実装は、前の例とは異なります。INSTEAD OFトリガーはUPDATEステートメントの代わりに起動するため、INSTEAD OFトリガーは、ビジネスルールテストに合格したかどうかを評価します。ビジネスルールテストに合格した場合、更新を行うには、INSTEAD OFトリガーが明示的にUPDATEステートメントを再度呼び出す必要があります。


4

AFTERは、トリガーSQLステートメントで指定されたすべての操作が正常に実行された場合にのみDMLトリガーが起動されることを指定します。このトリガーが起動する前に、すべての参照カスケードアクションと制約チェックも成功する必要があります。指定されたキーワードがFORのみの場合、AFTERがデフォルトです。

AFTERトリガーはビューで定義できません。

INSTEAD OFトリガーSQLステートメントの代わりにDMLトリガーが実行されることを指定します。これにより、トリガーステートメントのアクションが上書きされます。INSTEAD OFは、DDLまたはログオントリガーには指定できません。

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql


1
この表現は、「指定されたキーワードがFORのみの場合、AFTERがデフォルトです。」非常に混乱しています。彼らはそれをもっとよく言うことができたでしょう。
FMFF、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.