Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server触发器:更新查询新数据与旧数据_Sql_Sql Server_Triggers_Sql Update - Fatal编程技术网

SQL Server触发器:更新查询新数据与旧数据

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

我有两张桌子。其中一个有员工信息。我要基于此employee表向其中添加记录的另一个

我想做的是,无论何时(通过UDPATE查询)对employee表进行薪资调整,额外的表都会添加一行,其中包含新的事件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。

您应该在触发器中使用
删除的
插入的
表。因此,我认为:

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()
——这样,当您插入另一行时,数据库将负责设置该值