需要 SQL Server 中的 datetime 列,该列在修改记录时自动更新

Need a datetime column in SQL Server that automatically updates when the record is modified(需要 SQL Server 中的 datetime 列,该列在修改记录时自动更新)
本文介绍了需要 SQL Server 中的 datetime 列,该列在修改记录时自动更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I need to create a new DATETIME column in SQL Server that will always contain the date of when the record was created, and then it needs to automatically update whenever the record is modified. I've heard people say I need a trigger, which is fine, but I don't know how to write it. Could somebody help with the syntax for a trigger to accomplish this?

在 MySQL 术语中,它应该和这个 MySQL 语句完全一样:

In MySQL terms, it should do exactly the same as this MySQL statement:

ADD `modstamp` timestamp NULL 
    DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

这里有一些要求:

  • 当行被修改时,我无法更改我的 UPDATE 语句来设置字段,因为我无法控制写入记录的应用程序逻辑.
  • 理想情况下,我不需要知道表中任何其他列的名称(例如主键)
  • 它应该简短而高效,因为它会经常发生.
  • I can't alter my UPDATE statements to set the field when the row is modified, because I don't control the application logic that writes to the records.
  • Ideally, I would not need to know the names of any other columns in the table (such as the primary key)
  • It should be short and efficient, because it will happen very often.

推荐答案

SQL Server 无法为 UPDATE 定义默认值.

SQL Server doesn't have a way to define a default value for UPDATE.

所以你需要添加一个带有默认值的列来插入:

So you need to add a column with default value for inserting:

ADD modstamp DATETIME2 NULL DEFAULT GETDATE()

并在该表上添加触发器:

And add a trigger on that table:

CREATE TRIGGER tgr_modstamp
ON **TABLENAME**
AFTER UPDATE AS
  UPDATE **TABLENAME**
  SET ModStamp = GETDATE()
  WHERE **ID** IN (SELECT DISTINCT **ID** FROM Inserted)

是的,您需要为每个触发器指定一个标识列.

And yes, you need to specify a identity column for each trigger.

注意:在您不知道应用程序代码的表上插入列时要小心.如果您的应用有没有列定义的 INSERT VALUES 命令,即使在新列上使用默认值,它也会引发错误.

CAUTION: take care when inserting columns on tables where you don't know the code of the application. If your app have INSERT VALUES command without column definition, it will raise errors even with default value on new columns.

这篇关于需要 SQL Server 中的 datetime 列,该列在修改记录时自动更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
SSIS: Model design issue causing duplications - can two fact tables be connected?(SSIS:模型设计问题导致重复-两个事实表可以连接吗?)
SQL Server Graph Database - shortest path using multiple edge types(SQL Server图形数据库-使用多种边类型的最短路径)
Invalid column name when using EF Core filtered includes(使用EF核心过滤包括时无效的列名)
How should make faster SQL Server filtering procedure with many parameters(如何让多参数的SQL Server过滤程序更快)
How can I generate an entity–relationship (ER) diagram of a database using Microsoft SQL Server Management Studio?(如何使用Microsoft SQL Server Management Studio生成数据库的实体关系(ER)图?)