【问题标题】:SQL Server trigger : update query new vs old dataSQL Server 触发器:更新查询新旧数据
【发布时间】: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。

【问题讨论】:

    标签: sql sql-server triggers sql-update


    【解决方案1】:

    您应该在触发器中使用deletedinserted 表。所以,我认为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2016-11-03
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多