SQL Server触发器:更新查询新数据与旧数据
我有两张桌子。其中一个有员工信息。我要基于此employee表向其中添加记录的另一个 我想做的是,无论何时(通过UDPATE查询)对employee表进行薪资调整,额外的表都会添加一行,其中包含新的事件ID和薪资调整金额(因此,如果5个人的薪资增加1000英镑,则该行的调整金额为5000英镑) 我已经创建了触发器,它会在每次更新时添加行。然而,它没有做的只是带来额外的工资。我想不出该怎么做。到目前为止,我有这个代码SQL Server触发器:更新查询新数据与旧数据,sql,sql-server,triggers,sql-update,Sql,Sql Server,Triggers,Sql Update,我有两张桌子。其中一个有员工信息。我要基于此employee表向其中添加记录的另一个 我想做的是,无论何时(通过UDPATE查询)对employee表进行薪资调整,额外的表都会添加一行,其中包含新的事件ID和薪资调整金额(因此,如果5个人的薪资增加1000英镑,则该行的调整金额为5000英镑) 我已经创建了触发器,它会在每次更新时添加行。然而,它没有做的只是带来额外的工资。我想不出该怎么做。到目前为止,我有这个代码 Create trigger Salaryupdate On TBL_Emplo
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。您应该在触发器中使用
删除的和插入的表。因此,我认为:
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()
——这样,当您插入另一行时,数据库将负责设置该值