sql-server - 需要 SQL Server 中的日期时间列在修改记录时自动更新

标签 sql-server tsql timestamp

我需要创建一个新的 DATETIME SQL Server 中的列将始终包含创建记录的日期,然后在修改记录时需要自动更新。我听人说我需要一个触发器,这很好,但我不知道怎么写。有人可以帮助使用触发器的语法来完成此操作吗?
在 MySQL 术语中,它应该与此 MySQL 语句完全相同:

ADD `modstamp` timestamp NULL 
    DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
这里有一些要求:
  • 我无法更改我的 UPDATE修改行时设置字段的语句,因为我不控制写入记录的应用程序逻辑。
  • 理想情况下,我不需要知道表中任何其他列的名称(例如主键)
  • 它应该简短而有效,因为它会经常发生。
  • 最佳答案

    SQL Server 无法为 UPDATE 定义默认值.
    所以你需要添加一个带有默认值的列来插入:

    ADD modstamp DATETIME2 NULL DEFAULT GETDATE()
    
    并在该表上添加一个触发器:
    CREATE TRIGGER tgr_modstamp
    ON **TABLENAME**
    AFTER UPDATE AS
      UPDATE **TABLENAME**
      SET ModStamp = GETDATE()
      WHERE **ID** IN (SELECT DISTINCT **ID** FROM Inserted)
    
    是的,您需要为每个触发器指定一个标识列。
    注意:在您不知道应用程序代码的表上插入列时要小心。如果您的应用程序具有没有列定义的 INSERT VALUES 命令,即使在新列上使用默认值,它也会引发错误。

    关于sql-server - 需要 SQL Server 中的日期时间列在修改记录时自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493178/

    相关文章:

    sql-server - SSIS 中的错误 - [执行 SQL 任务] 错误 : There is an invalid number of result bindings returned for the ResultSetType: "ResultSetType_Rowset"

    sql - 需要对 UPDATE t-SQL 语句中的 SELECT 进行一些澄清

    即使 x 远高于所选行,使用 SELECT TOP x 也会产生 SQL 巨大的性能差异

    sql - T-SQL- 在单个查询中包含计数 (*) 的总和

    python - SQLAlchemy 转换为带有时区的 PostgreSQL 时间戳

    sql-server - 我的 T-SQL 查询中的这个 SELECT INTO 语句有什么问题?

    sql-server - PowerShell登录和特权

    asp.net - 获取在触发器 SQL Server 2008 中插入或更新的当前成员资格用户

    MySQL 5.7 准备好的语句更新了错误的时间戳列

    google-bigquery - 在 SQL 中,计算多个重叠对话的开始时间戳和结束时间戳之间的时间差