私はこの問題で達成したいのは、自分のテーブルの1つに更新/削除/挿入を行った場合、そのレコードをログ目的のテーブルの1つに挿入することです。トリガーで実行されるアクションを取得する方法
私はテストとして1つのテーブルを持っています。私は私のテーブルのテストで以下の行を挿入した場合、それはトリガーを起動し、ログ
テスト
Id | Name | Location
1 | Test | America
ログ
ID | updatetime | Action
----------------------------------------------------------
1 | 2017-04-06 16:51:18.190 | Insert
である私の別のテーブルに行を挿入する必要がありますと仮定
同じものを削除したり更新したりすると、それぞれ削除または更新する必要があります
ID | updatetime | Action
----------------------------------------------------------
1 | 2017-04-06 16:51:18.190 | Insert
1 | 2017-04-06 16:51:18.190 | Delete
は、私は上記のトリガーから
create trigger abc
on test
after insert, update, delete
as
begin
declare @id int
select @id = i.id from inserted i
insert into log values (@id, GETDATE())
end
を単一のトリガを作成している私は、IDとupdatetimeを取得することができています、しかし、どのようにそれを達成するためにどのように行われていたものを、アクションのようなアクション列を取得します。誰もがあなたが起きているアクションを決定するための次のアプローチを作成することができます手掛かり
あなたのトリガーがあなたはそれが呼び出されることになりますと仮定しているように見えるという点で、** MAJOR **欠陥を持っているの** 1行につき1回** - そうではありません**。トリガは**文ごとに** **起動します。したがって、文が25行に影響する場合、トリガは**一度**発生しますが、Insertedおよび/または 'Deleted'疑似テーブルにはそれぞれ25行。あなたのコードがここで選択する25行のうちどれですか? 'SELECT @id = i.id FROM Inserted i' - 非決定論的です。これを考慮に入れてトリガーを書き直す必要があります。 –