SQL Server删除触发器不更新表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server删除触发器不更新表相关的知识,希望对你有一定的参考价值。
我还在学习SQL,而且我遇到触发器问题。
我有以下代码:
CREATE TRIGGER DeleteYTDSales
ON dbo.Sales
AFTER DELETE
AS
BEGIN
UPDATE MasterTable
SET MasterTable.SalesYTD = MasterTable.SalesYTD - Deleted.Amount
FROM Sales
JOIN Deleted ON Sales.CustomerID = Deleted.CustomerID
END
GO
从sales表中删除一行后,我需要更新SalesYTD
中CustomerID
的MasterTable
列。现在它没有更新列,我无法弄清楚为什么不。
答案
因为你缺少MasterTable
的连接条件。你正在寻找这个
UPDATE m
SET m.SalesYTD = m.SalesYTD - d.Amount
FROM MasterTable m
JOIN Deleted d ON d.CustomerID = m.CustomerID
另一答案
你的更新真的很奇怪。我想你只是打算:
UPDATE mt
SET SalesYTD = mt.SalesYTD - d.Amount
FROM MasterTable mt JOIN
Deleted d
ON mt.CustomerID = d.CustomerID ;
在您的代码中,您正在更新MasterTable
的所有行。使用UPDATE
s SQL Server可能有点棘手。我的建议是使用FROM
子句并始终将别名放在UPDATE
中。
您不需要参考Sales
表,因为您需要的所有信息都在deleted
中。
你也可以这样写:
UPDATE MasterTable
SET SalesYTD = mt.SalesYTD - d.Amount
FROM Deleted d
WHERE MasterTable.CustomerID = d.CustomerID ;
以上是关于SQL Server删除触发器不更新表的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 使用表触发器记录表插入,更新,删除行数
Sql Server 2005 - 插入更新触发器 - 获取更新,插入行
如何在 SQL Server 触发器中复制插入、更新、删除的行
SQL Server2008 触发器中,根据一个表修改另外一个表