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

如何在MSSQL中正确实现created_at与updated_at自动时间字段

MSSQL 实现自动更新的 created_at 与 updated_at 字段方案

1. 语法问题说明

你遇到的报错是正常现象,MSSQL 本身不支持 MySQL 专属的 ON UPDATE CURRENT_TIMESTAMP 字段属性。另外需要额外纠正:MSSQL 的 TIMESTAMP 类型是行版本号二进制类型,不存储时间值,和你需要的创建时间语义不符,如果你已经用 TIMESTAMP 类型的 created_at 正常拿到了时间值,大概率是字段配置存在隐性兼容问题,后续有潜在风险,建议替换为 DATETIME2 或 DATETIME 类型。

2. 正确配置方案

如果你还未建表,使用以下建表语句

CREATE TABLE current_timestamp_demos
(
    id         INT PRIMARY KEY IDENTITY (1, 1),
    msg        VARCHAR(255) NOT NULL,
    -- 创建时间默认取当前时间
    created_at DATETIME2 DEFAULT CURRENT_TIMESTAMP,
    -- 初始默认也是当前时间,后续靠触发器自动更新
    updated_at DATETIME2 DEFAULT CURRENT_TIMESTAMP
);

如果你已经建完表,且不想改动已有的 created_at 配置

直接添加触发器即可实现 updated_at 自动更新,无需修改现有表结构。

3. 新增更新触发器实现自动刷新

MSSQL 需要通过 AFTER UPDATE 触发器实现行更新时自动修改 updated_at 字段,触发器代码如下:

CREATE TRIGGER trg_current_timestamp_demos_update
ON current_timestamp_demos
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    -- 关联 inserted 系统表,批量更新所有被修改行的 updated_at 字段
    UPDATE current_timestamp_demos
    SET updated_at = CURRENT_TIMESTAMP
    FROM current_timestamp_demos t
    INNER JOIN inserted i ON t.id = i.id;
END;

4. 效果验证

可以通过以下语句测试功能是否正常:

-- 插入测试数据
INSERT INTO current_timestamp_demos (msg) VALUES ('测试内容');
-- 查看插入后两个时间一致
SELECT * FROM current_timestamp_demos;
-- 更新数据
UPDATE current_timestamp_demos SET msg = '修改后的测试内容' WHERE id = 1;
-- 查看 updated_at 已经自动更新为修改时间
SELECT * FROM current_timestamp_demos;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:06:05