如何在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