如何在SQL中执行触发器?

如何在SQL中执行触发器?,sql,Sql,我正在努力学习触发器,我知道如何做真正基本的触发器,但我不能完全理解这一点。我有两张桌子,服务员和售货员 Services(ServiceID,ServiceCost,SalesTotal) Sales(TransactionID,TransactionDate,Amount,ServiceID) 我正在尝试为更新、删除、插入写入触发器。当您在Sales表中输入新销售时,SalesTotal将根据ServiceID在Services表中更新 例: 因此,如果TransactionID“101”

我正在努力学习触发器,我知道如何做真正基本的触发器,但我不能完全理解这一点。我有两张桌子,服务员和售货员

Services(ServiceID,ServiceCost,SalesTotal)
Sales(TransactionID,TransactionDate,Amount,ServiceID)
我正在尝试为更新、删除、插入写入触发器。当您在Sales表中输入新销售时,SalesTotal将根据ServiceID在Services表中更新

例:

因此,如果TransactionID“101”的SalesTotal为1000,则在插入之后,它将为1050,如果我删除/更新,则相反


我想我必须使用联接表,但我目前遇到了难题。

使用此触发器,或拆分插入/dalete/update: 代码:


将此添加到触发器中

BEGIN
if exists (select * from deleted)
begin
    UPDATE Services
     SET SalesTotal = SalesTotal - deleted.Amount
     FROM Services  
     JOIN deleted    ON Services.ServiceID = deleted.ServiceID
end 
else  
begin
    UPDATE Services
    SET SalesTotal = SalesTotal + inserted   .Amount
    FROM Services  
    JOIN inserted   ON Services.ServiceID = inserted.ServiceID
end
END

SQL语法对于每个DB引擎都是不同的。你用哪一种?谢谢你的快速回复,不过我有个问题。为什么在加入表时,必须声明“已删除”或“已插入”?触发器的sys临时表。如果从“销售”中删除某些值,则原始删除行将处于“临时删除”状态。若插入,则可以从插入的表中捕捉插入的值。插入/删除的文件与原始文件具有相同的结构。但您只能在触发器中使用它。如果您更新行,则原始值处于删除状态,而新更新的值处于插入状态。因为sql server首先删除原始行,然后插入具有新值的新行。这些表仅存在于1个SessionTanks中以获取帮助,但Matej首先回答了问题,因此我接受了他的回答。 CREATE TRIGGER [dbo].[t_Update_Services] on Sales AFTER UPDATE,INSERT, DELETE

AS

BEGIN

UPDATE a SET SalesTotal = SalesTotal - b.Amount FROM Services a JOIN deleted b ON a.ServiceID = b.ServiceID

UPDATE a SET SalesTotal = SalesTotal + b.Amount FROM Services a JOIN inserted b ON a.ServiceID = b.ServiceID

END

BEGIN
if exists (select * from deleted)
begin
    UPDATE Services
     SET SalesTotal = SalesTotal - deleted.Amount
     FROM Services  
     JOIN deleted    ON Services.ServiceID = deleted.ServiceID
end 
else  
begin
    UPDATE Services
    SET SalesTotal = SalesTotal + inserted   .Amount
    FROM Services  
    JOIN inserted   ON Services.ServiceID = inserted.ServiceID
end
END