【问题标题】:SQL : how do you create a trigger in a SQL database to update a last modified date columnSQL:如何在 SQL 数据库中创建触发器以更新上次修改日期列
【发布时间】:2019-07-24 19:16:13
【问题描述】:

当另一列已被修改时,我需要使用日期戳更新数据库列。

例如,当数据库规格表原理图列Partstatusid 更改时,需要更新标记。

我已阅读我需要创建触发器,但由于我的技能集仅基于 SQL 报告编写和查询,因此我不是 100% 的代码...

非常感谢。

【问题讨论】:

  • 您好,请先告诉我们您使用的数据库系统。
  • 数据库触发器的语法很大程度上取决于您使用的具体数据库产品。我们是在谈论 oracle、postgresql、sql server、mysql 还是其他东西?你可以通过在你的问题上设置一个匹配的标签来轻松地做到这一点。

标签: sql triggers


【解决方案1】:

由于您尚未提供 DBMS,我将提供两种选择,一种用于MS SQL Server,另一种用于Oracle。如果您需要除此之外的其他内容,请指定您使用的 DBMS。

对于 MS SQL Server:

CREATE TRIGGER tiu_data_table
ON dbo.data_table
AFTER INSERT, UPDATE
AS
BEGIN
    IF UPDATE(Partstatusid)
    BEGIN
        UPDATE dbo.data_table
        SET last_updated = GETDATE()
        WHERE id_col IN (SELECT id_col FROM Inserted)
    END
END

对于甲骨文:

CREATE OR REPLACE TRIGGER tiu_data_table
    BEFORE INSERT OR UPDATE ON "schema_name".data_table FOR EACH ROW
DECLARE
BEGIN
    IF UPDATING('Partstatusid') THEN
        :NEW.last_updated := SYSDATE;
    END IF;
END;
/

【讨论】:

  • 对于 MS SQL 服务器,我会添加条件来比较新旧 Partstatusid - OP 很可能只需要观察值的变化,而不是用相同的值覆盖。对于 Oracle,我不知道是否需要。
  • 我已经添加了 UPDATE() 用于 SQL Server 和 UPDATING() 用于 Oracle。
  • update(...) 在字段更新时始终为真 - 即使值相同。
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2012-08-21
  • 2011-06-02
  • 2015-06-14
相关资源
最近更新 更多