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
相关产品推荐
相关产品推荐

