gpt4 book ai didi

sql - 来自单个更新 SQL 语句的多行更新 SQL 触发器

转载 作者:行者123 更新时间:2023-12-02 10:03:11 24 4
gpt4 key购买 nike

好的。我对 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,但触发器是我从未使用过的东西, 到目前为止。因此,非常欢迎任何帮助:)

最佳答案

看来你需要这样的东西

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

关于sql - 来自单个更新 SQL 语句的多行更新 SQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16625014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com