繁体   English   中英

在使用更新后触发器触发其他列的更新后,如何将日期列中的特定行更新为今天?

[英]How to update specific row in datecolumn to date today after update on other column using after update trigger?

当使用T-SQL中的更新后触发器更新(未插入)Column CustomerProductID时,如何将Date列DateMod更新为今天的日期?

一些背景信息:表已经包含产品列表(键列Itemcode ),一旦收到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存在的解决方案(从插入/更新中选择)的解决方案,但是它如何工作? 如果两种方法都可行,在这种情况下哪一种是最有利的? 非常感谢!

我更喜欢将其作为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是正确的主键列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM