好的。我对 SQL 触发器很陌生,并且遇到了一些问题。插入触发器工作得很好,删除触发器也可以。起初,对多行进行删除只会删除一个,但我设法为自己找出了一个:)
但是,即使经过大量搜索(在此处和 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
您将立即意识到,此触发器非常棒 - 如果您只想更新一条记录。否则,它会失败。现在 - 这里的主要问题是 - 我如何捕获所有需要更新的记录,并在一个触发操作中更新它们。
我在 Stack Overflow 上看到的示例让我有些困惑,或者似乎无效 - 例如,它们中的大多数似乎只更新第二张/其他表中的一个值,而不是像我试图做的那样。似乎适用于多个值的那些,我无法理解:(
所以经过大约 2 个小时的搜索,我放弃了,希望你能帮助我:) 我意识到这是一个触发器新手问题,虽然我知道我的 MS-SQL,但触发器是我从未使用过的东西,直到现在. 所以非常欢迎任何帮助:) W