【问题标题】:How to make created_at and updated_at fields in MsSQL?如何在 MsSQL 中创建 created_at 和 updated_at 字段?
【发布时间】:2022-01-04 07:23:38
【问题描述】:

我想在 MsSQL 中创建 created_atupdated_at

这里是查询:

CREATE TABLE current_timestamp_demos
(
    id         INT PRIMARY KEY IDENTITY (1, 1),
    msg        VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
);

created_at 一切正常,但在提交 updated_at - 在这里,ON UPDATE CURRENT_TIMESTAMP 出现错误。 DataGrip 说的是方言,我猜这是MySQL 方言。

那么,如何创建 created_atupdated_at 字段?我创建了created_at,但使用updated_at 我遇到了一些问题。

【问题讨论】:

  • 默认 updated_at 列值为 NULL。但是在更新行 updated_at 列值将通过查询用 current_timestamp 更新。
  • 我认为,当您添加记录时created_atupdated_at 将具有相同的值,但是当您更新它时,updated_at 会发生变化。不过这里没关系,就是这个语句DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP在这里不起作用,是MySQL dialekt,不是我需要的(MsSQL)
  • 不要使用 TIMESTAMP。它实际上是rowversion。还要注意The timestamp syntax is deprecated. 使用DATETIMEDATETIME2
  • SQL Server 不支持ON UPDATE CURRENT_TIMESTAMP。您需要在查询中手动更新列值,或者通过更新触发器进行更新

标签: sql-server database date timestamp


【解决方案1】:

完整代码:

CREATE TABLE current_timestamp_demos
(
    id         INT PRIMARY KEY IDENTITY (1, 1),
    msg        VARCHAR(255) NOT NULL,
    created_at DATETIME2 NOT NULL DEFAULT SYSDATETIME(),
    updated_at DATETIME2 
);
GO

CREATE TRIGGER E_U_CTD
ON current_timestamp_demos
FOR UPDATE
AS
UPDATE T
SET updated_at = SYSDATETIME()
FROM   current_timestamp_demos AS T
       JOIN inserted AS i
          ON T.id = i.id;
GO

也使用 SYSDATETIME() 代替 CURRENT_TIMESTAMP。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-02
    • 2023-04-07
    • 2017-05-26
    • 1970-01-01
    • 2016-11-04
    • 2011-06-11
    相关资源
    最近更新 更多