【问题标题】:How to create a trigger that automatically update a datetime column when a field of the table is updated如何创建在更新表的字段时自动更新日期时间列的触发器
【发布时间】:2019-09-03 15:11:12
【问题描述】:

我正在尝试创建一个测量行的 UPDATE_DATE 的列。 我正在构建一个触发器,但我有一个关于密钥的模棱两可的问题。

CREATE TRIGGER ModDate_location_update
    ON dim_Location
    AFTER UPDATE
AS
BEGIN
    UPDATE dbo.dim_Location 
    SET UPDATE_DATE = GETDATE()
    --WHERE INSERT_DATE IN (SELECT INSERT_DATE FROM INSERTED)
    FROM dim_Location X
    JOIN dim_Location Y ON X.NEW_LOCATION_KEY = Y.NEW_LOCATION_KEY
end

消息 8154,级别 16,状态 1,过程 ModDate_location_update,第 6 行 [批处理开始第 119 行] 表“dbo.dim_Location”不明确。

【问题讨论】:

  • 这里可能存在更大的问题,即您的触发器似乎是递归的,因为dim_Location 上的更新会触发再次更新同一个表的触发器。这是预期的逻辑吗?
  • 在您的UPDATE 子句中使用别名,但是,您为什么不在这里引用inserted?这将在您每次更新单行时更新 整个 表;这肯定是不想要的。看起来你真的想要一个INSTEAD OF 触发器,真的。

标签: sql-server ssms-2017


【解决方案1】:

只需更新所有具有出现在 INSERTED 虚拟表中的 PK 的行。例如:

CREATE TRIGGER ModDate_location_update
    ON dim_Location
    AFTER UPDATE
AS
BEGIN
    UPDATE dbo.dim_Location 
    SET UPDATE_DATE = GETDATE()
    WHERE LOCATION_ID IN (SELECT LOCATION_ID FROM INSERTED)
end

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多