SQL Server删除触发器不更新表

问题描述 投票:0回答:2

我还在学习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表中删除一行后,我需要更新SalesYTDCustomerIDMasterTable列。现在它没有更新列,我无法弄清楚为什么不。

sql sql-server triggers
2个回答
2
投票

因为你缺少MasterTable的连接条件。你正在寻找这个

UPDATE m
    SET m.SalesYTD = m.SalesYTD - d.Amount
    FROM MasterTable m
    JOIN Deleted d ON d.CustomerID = m.CustomerID 

0
投票

你的更新真的很奇怪。我想你只是打算:

UPDATE mt
  SET SalesYTD = mt.SalesYTD - d.Amount
  FROM MasterTable mt JOIN
       Deleted d
       ON mt.CustomerID = d.CustomerID ;

在您的代码中,您正在更新MasterTable的所有行。使用UPDATEs SQL Server可能有点棘手。我的建议是使用FROM子句并始终将别名放在UPDATE中。

您不需要参考Sales表,因为您需要的所有信息都在deleted中。

你也可以这样写:

UPDATE MasterTable
  SET SalesYTD = mt.SalesYTD - d.Amount
  FROM Deleted d
  WHERE MasterTable.CustomerID = d.CustomerID ;
© www.soinside.com 2019 - 2024. All rights reserved.