如何在 MS SQL 2008 中使用触发器更新单个表
Posted
技术标签:
【中文标题】如何在 MS SQL 2008 中使用触发器更新单个表【英文标题】:How to update a single table using trigger in MS SQL 2008 【发布时间】:2010-05-04 08:12:10 【问题描述】:我有一个 PeroidicDeduction 表,字段是 ID(自增),TotalDeduction(例如可以是贷款),Paid(每月扣除),RemainingAmount,
我想要的是每次插入或更新表格时---RemainingAmount 将获得 TotalDeduction-SUM(Paid) 的值...并编写以下触发器...但对我不起作用
创建触发器 dbo.UpdatePD ON PeroidicDecution 插入后,更新
作为
开始
UPDATE PeroidicDecution SET REmaininAmoubnt=(SELECT TotalDeduction-(SELECT SUM(Paid) FROM PeroidicDeduction) FROM PeroidicDeduction)
结束
注意:它在一张桌子上
【问题讨论】:
你的意思是单身 - 在同一张桌子内 是的,我想在一个表中完成任务 【参考方案1】:创建两个触发器,一个 INSTEAD OF UPDATE 和一个 INSTEAD OF INSERT。这是 INSTEAD OF UPDATE 的代码:
CREATE TRIGGER dbo.UpdatePD ON PeroidicDedcution
INSTEAD OF Update
AS
SET NOCOUNT ON
UPDATE p
SET col1=i.col1
,col2=i.col2
FROM INSERTED i
INNER JOIN PeroidicDedcution p ON i.PK=p.PK
UPDATE PeroidicDedcution
SET REmaininAmoubnt=(SELECT TotalDeduction-(SELECT SUM(Paid) FROM PeroidicDeduction) FROM PeroidicDeduction)
go
它将执行触发触发器的原始更新,以及问题中触发器的 SUM 逻辑。
这里是 INSTEAD OF INSERT 触发器:
CREATE TRIGGER dbo.InsertPD ON PeroidicDedcution
INSTEAD OF INSERT
AS
SET NOCOUNT ON
INSERT INTO PeroidicDedcution
(col1, col2, ...)
SELECT
col1, col2, ...
FROM INSERTED
UPDATE PeroidicDedcution
SET REmaininAmoubnt=(SELECT TotalDeduction-(SELECT SUM(Paid) FROM PeroidicDeduction) FROM PeroidicDeduction)
go
【讨论】:
【参考方案2】:您不应该使用触发器来执行此操作,因为如果您在表上有更新触发器并且触发器导致并更新到同一个表,它将递归地自行触发。而是将逻辑添加到您的插入和更新存储过程中
【讨论】:
以上是关于如何在 MS SQL 2008 中使用触发器更新单个表的主要内容,如果未能解决你的问题,请参考以下文章
如何:使用 SQL Server 2008 为自动更新修改日期创建触发器
如何将一个触发器写入 SQL Server 2008 的所有表