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

SSMS中UpdatedDTTM字段无法自动更新的技术咨询

问题原因与解决方法

你的理解确实有误——SQL Server默认不会自动更新UpdatedDTTM字段,这个字段不会随数据修改自动填充或变更,必须手动设置,或者通过触发器、系统版本化表这类机制实现自动更新。

下面给你几种实用的解决方式:

1. 手动更新(临时测试用)

每次修改数据时,手动指定UpdatedDTTM的值,比如修改LastName时:

UPDATE 你的员工表名
SET LastName = '新姓氏', UpdatedDTTM = SYSDATETIME()
WHERE 员工ID = 目标ID;

SYSDATETIME()比GETDATE()精度更高,更适合记录时间戳。

2. 创建触发器(自动更新,推荐)

创建一个AFTER UPDATE触发器,只要表中数据被修改,就自动把对应行的UpdatedDTTM设为当前时间,不用每次手动编写:

CREATE TRIGGER trg_员工表_更新时间戳
ON 你的员工表名
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON; -- 避免返回影响行数的额外信息
    UPDATE t
    SET t.UpdatedDTTM = SYSDATETIME()
    FROM 你的员工表名 t
    INNER JOIN inserted i ON t.员工ID = i.员工ID; -- 关联被更新的行
END;

替换代码里的你的员工表名和员工ID为你实际的表名和主键字段名即可。创建完成后,再修改LastName或其他字段,UpdatedDTTM就会自动更新。

3. 系统版本化表(SQL Server 2016+适用)

如果你的SQL Server版本是2016及以上,可以开启系统版本化表,不仅能自动维护UpdatedDTTM,还能保留完整的数据变更历史:

-- 先添加时间戳列
ALTER TABLE 你的员工表名
ADD UpdatedDTTM DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN,
    CreatedDTTM DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN,
    PERIOD FOR SYSTEM_TIME (CreatedDTTM, UpdatedDTTM);

-- 开启系统版本化
ALTER TABLE 你的员工表名
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.员工表历史表));

这种方式适合需要追踪数据变更轨迹的场景,若只是单纯需要更新时间戳,用触发器就足够了。

内容的提问来源于stack exchange,提问作者MrReddingtonsHat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:00:56