You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中实现类似MySQL的ON UPDATE自动更新时间功能?

在SQL Server中实现自动记录行更新时间的方法

MySQL里用ON UPDATE CURRENT_TIMESTAMP就能自动捕获行的更新时间,在SQL Server中可以通过以下两种方式实现相同效果:

方法一:触发器实现(兼容所有SQL Server版本)

这是通用方案,不管你用哪个版本的SQL Server都能生效。

1. 创建表

先建表,给date_modified列设置默认值为当前时间,建议同时添加主键(方便触发器精准更新):

CREATE TABLE important_action 
(
    id INT IDENTITY(1,1) PRIMARY KEY,
    myAction VARCHAR(50),
    actionStatus VARCHAR(5),
    date_modified DATETIME2(3) 
        CONSTRAINT DF_important_action_date_modified DEFAULT SYSDATETIME()
        COMMENT 'Date and time record has been modified.'
);

2. 创建更新触发器

写一个触发器,当表中数据被更新时,自动把对应行的date_modified改成当前时间:

CREATE TRIGGER TR_important_action_UpdateModifiedTime
ON important_action
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    -- 通过主键关联临时表inserted,只更新被修改的行,避免全表更新
    UPDATE t
    SET t.date_modified = SYSDATETIME()
    FROM important_action t
    INNER JOIN inserted i ON t.id = i.id;
END;

注意:触发器里必须用主键或唯一键关联inserted表,不然会误更新所有行。

方法二:SQL Server 2016+内置语法

从SQL Server 2016开始,不用写触发器,直接在列定义里加ON UPDATE就能实现:

CREATE TABLE important_action 
(
    id INT IDENTITY(1,1) PRIMARY KEY,
    myAction VARCHAR(50),
    actionStatus VARCHAR(5),
    date_modified DATETIME2(3) 
        CONSTRAINT DF_important_action_date_modified 
        DEFAULT SYSDATETIME() 
        ON UPDATE SYSDATETIME()
        COMMENT 'Date and time record has been modified.'
);

这种写法更简洁,但只支持SQL Server 2016及更高版本。

内容的提问来源于stack exchange,提问作者Itay Moav -Malimovka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 06:50:14