Ok。私は SQL トリガーにまったく慣れておらず、いくつかの問題がありました。挿入トリガーは正常に機能し、削除トリガーも機能します。最初は、複数の行を削除しても1行しか削除されませんでしたが、自分でそれを理解することができました:)
ただし、大規模な検索を行った後でも (ここと Google で)、私が持っている UPDATE トリガーに対する満足のいく答えを見つけることができません。次のような更新を行うと
UPDATE Customers Set CustomerUser = 0 Where CustomerStatus = 3
残念ながら、一方のレコードのみが更新され、もう一方のレコードはそのまま残ります。明らかに、これは良くありません。
私が使用しているトリガーは次のとおりです。
ALTER TRIGGER [dbo].[TRG_TriggerName] ON [dbo].[USER_Customers]
FOR UPDATE
AS
declare @customerid int;
declare @customervenue int;
declare @customeruser int;
declare @customerarea int;
declare @customerevent int;
declare @customerproject int;
declare @customerstatus int;
select @customerid=i.CustomerID from inserted i;
select @customervenue=i.CustomerVenue from inserted i;
select @customerarea=i.CustomerArea from inserted i;
select @customerevent=i.CustomerEvent from inserted i;
select @customerproject=i.CustomerProject from inserted i;
select @customeruser=i.CustomerUser from inserted i;
select @customerstatus=i.CustomerStatus from inserted i;
Update USER_Instances Set InstanceArea = @customerarea, InstanceVenue = @customervenue, InstanceUser = @customeruser, InstanceStatus = @customerstatus, InstanceEvent = @customerevent, InstanceLastUpdate = GetDate() Where InstanceObject = 17 AND InstanceIdentity = @customerid
GO
すぐにわかるように、1 つのレコードだけを更新する場合は、このトリガーが最適です。そうしないと、失敗します。ここでの主な質問は、更新が必要なすべてのレコードを取得し、それらすべてを 1 つのトリガー アクションで更新するにはどうすればよいかということです。
ここでスタックオーバーフローで見た例は、私をやや混乱させるか、効果がないように見えます-たとえば、それらのほとんどは、私がしようとしているような束全体ではなく、2番目/他のテーブルの1つの値のみを更新するようです. 複数の値で動作するように見えるものは、理解できません:(
約 2 時間の検索の後、あきらめて、あなたが私を助けてくれることを願っています :) これはトリガーの初心者の問題であることに気付きました。MS-SQL は知っていますが、トリガーは今まで使用したことがないものです。 . だからどんな助けも大歓迎です:) W