SQL Server 触发器:更新查询新旧数据
Posted
技术标签:
【中文标题】SQL Server 触发器:更新查询新旧数据【英文标题】:SQL Server trigger : update query new vs old data 【发布时间】:2016-02-12 12:58:17 【问题描述】:我有两张桌子。其中一个有员工信息。另一个我想根据这个员工表添加记录。
我想要发生的是,每当对员工表进行工资调整(通过 UDPATE 查询)时,额外的表将添加一行,其中包含新的事件 ID 和调整工资的金额(所以如果5个人的工资增加了1000英镑,那么该行将调整为5000英镑)。
我已经创建了触发器,它会在每次更新时添加行。然而,它没有做的只是带来额外的薪水。我想不出该怎么做。到目前为止我有这个代码;
Create trigger Salaryupdate
On TBL_Employees
For update
As
Insert TBL_audit (notes,Delta,AdjDate)
Select 'Salary update', sum(salary), getdate()
From TBL_Employees
我知道sum
位是错误的,因为我只想要工资值的变化,而不是总和。
如何找到更改的行(或其他方法)的新旧值之间的差异?
我使用的是 SQL Server 2008。
【问题讨论】:
【参考方案1】:您应该在触发器中使用deleted
和inserted
表。所以,我认为:
Create trigger Salaryupdate
On TBL_Employees
For update
As
Insert TBL_audit(notes, Delta, AdjDate)
Select 'Salary update',
coalesce(newsalary, 0) - coalesce(oldsalary, 0),
getdate()
From (select sum(salary) as newsalary from inserted) i cross join
(select sum(salary) as oldsalary from deleted) d;
此外,在 SQL Server 中,您可以将 AdjDate
设置为默认值 getdate()
- 这样,当您插入另一行时,数据库会负责设置该值。
【讨论】:
以上是关于SQL Server 触发器:更新查询新旧数据的主要内容,如果未能解决你的问题,请参考以下文章
sql 检测更新触发器中修改的字段(sql server 2005)?