OK。私はSQLトリガーにまったく慣れておらず、いくつかの問題がありました。挿入トリガーは問題なく機能し、削除トリガーも正常に機能します。最初は、複数の行を削除しても1つしか削除されませんでしたが、私はそれを自分で理解することができました:)
ただし、(こことGoogleで)広範囲に検索した後でも、自分が持っているUPDATEトリガーに対する満足のいく答えを見つけることができません。私が次のような更新を行う場合
UPDATE Customers Set CustomerUser = 0 Where CustomerStatus = 3
残念ながら、1つのレコードのみが更新され、もう1つのレコードはそのまま残ります。明らかに、これは良くありません。
私が使用しているトリガーは次のとおりです。
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つのトリガーアクションで更新するにはどうすればよいですか。
Stack Overflowでここで見た例は、私を多少混乱させるか、効果がないように見えます。たとえば、それらのほとんどは、2番目/他のテーブルの1つの値のみを更新することを扱っており、私がやろうとしているような全体ではないようです。複数の値で動作するように見えるもの、私は理解できません:(
したがって、約2時間の検索の後、私はあきらめ、あなたが私を助けてくれることを願っています:)これはトリガー初心者の問題であり、MS-SQLは知っていますが、トリガーは今まで使用したことがないものです。 。だからどんな助けでも大歓迎です:)W
このようなものが必要なようです
ALTER TRIGGER [dbo].[TRG_TriggerName] ON [dbo].[USER_Customers]
FOR UPDATE
AS
UPDATE USER_Instances
SET InstanceArea = i.CustomerArea,
InstanceVenue = i.CustomerVenue,
InstanceUser = i.CustomerUser,
InstanceStatus = i.CustomerStatus,
InstanceEvent = i.CustomerEvent,
InstanceLastUpdate = GetDate()
FROM USER_Instances JOIN inserted i
ON InstanceIdentity = i.CustomerID AND InstanceObject = 17
inserted
仮想テーブルには複数の行を含めることができるため、JOIN
を正しく実行するにはUPDATE
する必要があります。