SQL Server 2008R2の事前定義された「CREATETRIGGER」を使用してトリガーを作成したいときに迷子になりました。トリガーの作成に使用できる直接SQLステートメントと、AFTER、BEFOREなどを定義する方法を教えてください。
また、行UPDATED/INSERTED/DELETEDを認識し、それらの列値を使用してトリガー内で操作を実行するにはどうすればよいですか?
データベースはセット指向であり、トリガーも同じです。特定の操作が実行されるとトリガーが起動し、その操作が複数の行に影響を与える可能性があります。したがって、質問"Say I want to know the Primary Key of that row"
は誤った名称です。複数の行が挿入されている可能性があります。
SQL Serverは、inserted
およびdeleted
という名前のAFTERトリガー用に2つの特別なテーブルを提供します。これらは、アクションによって挿入または削除され、影響を受けるテーブルと同じ構造の行を表します。更新トリガーはinserted
とdeleted
の両方にデータを入力する可能性がありますが、挿入トリガーはinserted
テーブルにのみデータを入力します。
コメントから:
ただし、電子メールの受信者は、外部キーIDが最初のテーブル(トリガーのあるテーブル)にある2番目のテーブルの値に基づいて決定されます。
この質問への答えは、inserted
テーブル(これも複数の行があると想定する必要があります)を使用して行を循環し、電子メールを送信することです。ただし、電子メールロジックをトリガーに入れることはお勧めしません。代わりに、そのロジックをストアドプロシージャに入れて、そこからメールを送信することをお勧めします。
参考: トリガーの作成
基本的な構文は次のとおりです。
CREATE TRIGGER YourTriggerName ON dbo.YourTable
FOR|AFTER INSERT, UPDATE, DELETE
AS
BEGIN
/*Put what ever you want here*/
UPDATE AnotherTable
SET SomeColumn = AnotherColumn
FROM inserted | deleted
END
GO
トリガーは、テーブルが何らかの方法で変更された後に「トリガー」されるイベントベースのプロセスです。これは、DELETE、UPDATE、INSERTなどで行われます。 BEFOREおよびAFTER構文は、イベントがコミットされる前または後にトリガーを実行するかどうかを定義します。
それは短いバージョンです。チェックアウト [〜#〜] msdn [〜#〜] 。