gpt4 book ai didi

sql - 使用更新表中的聚合的 AFTER UPDATE 触发器

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

我在更新触发器方面遇到问题。如果他们在同一支球队,我希望触发器将 Quarterbacks.Yards 设置为等于宽 catch 码数之和。

create trigger T_Receiving_Passing
on NFL.Widereceivers
after update
as
begin
declare
@receivingyards int,

select @receivingyards = sum (Widereceivers.Yards) from NFL.Widereceivers
update NFL.Quarterbacks
set Quarterbacks.Yards = @receivingyards
where Quarterbacks.Team = Widereceivers.Team
end

在语句末尾,Widereceivers.Team 带有红色下划线,它导致了错误。每当我尝试引用另一个表中的列而不在 from 子句中命名该表时,我都会遇到同样的错误。我该如何解决这个问题?

最佳答案

好的,您应该能够在没有 SELECT 语句或其变量的情况下执行此操作,而是使用更复杂的 UPDATE 语句连接到特殊的 inserted 保存更新后的新值的表。

CREATE TRIGGER T_Receiving_Passing
ON NFL.Widereceivers
AFTER UPDATE
AS
UPDATE NFL.Quarterbacks
-- Get the SUM() in a subselect
SET Quarterbacks.Yards = (SELECT SUM(Yards) FROM Widereceivers WHERE Team = inserted.Team)
FROM
NFL.Quarterbacks
-- Join against the special inserted table
JOIN inserted ON Quarterbacks.Team = inserted.Team
GO

Here is a proof of concept

在最初的尝试中,您希望首先使用 SELECT 查询来填充标量变量。但是,在 UPDATE 语句中,您可以使用子选择来返回 SET 子句中恰好一行的一列来检索新值。

由于您的要求是使用聚合 SUM(),因此它不像直接从 inserted 分配值(如 SET Yards = Inserted)那样简单.码。相反,子选择生成的总和仅限于 inserted 行中使用的 Team

插入/删除表而言,review the official documentation 。我已经好几年没有定期使用 SQL Server 了,但如果我没记错的话,inserted 表必须出现在 FROM 子句中,这意味着它通常需要 JOIN 加入。在您的 UPDATE 语句中,子查询和外部查询都需要 inserted,因此它被加入到外部查询中。

关于sql - 使用更新表中的聚合的 AFTER UPDATE 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20672360/

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