如何使用更新后触发器更新其他列后更新日期列中的特定行?

时间:2014-03-15 12:39:06

标签: sql sql-server-2008 date triggers sql-update

如何使用T-SQL中的更新后触发器更新日期列 DateMod 到今天更新(未插入)列 CustomerProductID 的日期?

一些背景信息:表已包含产品列表(键列项目代码),一旦收到CustomerProductID,它就会将该特定行(产品)的列从NULL更改为整数值。此更新是将DateMod列更新为行(产品)的今天日期的触发器。 我正在使用SSMS 2008并使用以下代码更改整个日期列,而不是更新行的特定日期字段:

 CREATE TRIGGER trigger_name
   ON Table1
   AFTER UPDATE
AS 
BEGIN
      SET NOCOUNT ON;
      IF UPDATE (CustomerProductID) BEGIN
        Update Table1
        SET DateMod=GETDATE() 
      END
END

我已经阅读了一些使用old.value和new.value或使用where where(从插入/更新中选择)的解决方案,但是它是如何工作的?如果两种方法都有效,那么在这种情况下哪种方法最有用? 非常感谢!

1 个答案:

答案 0 :(得分:1)

我更喜欢将此作为before update触发器(逻辑上的事情......在更新触发器之后进行更新建议无限循环,并且在某些数据库中不允许)。但是SQL Server并不支持它。

在任何情况下,正确的语法是使用inserted连接回原始表:

CREATE TRIGGER trigger_name
   ON Table1
   AFTER UPDATE
AS 
BEGIN
      SET NOCOUNT ON;
      IF UPDATE(CustomerProductID) BEGIN
        Update t1
            SET DateMod = GETDATE() 
            FROM Table1 t1 join
                 Inserted i
                 ON Table1.PrimaryKeyColumn = i.PrimaryKeyColumn
      END
END

更改代码,以便PrimaryKeyColumn是正确的主键列。