有什么方法可以在SQL Server中自动更新修改的日期时间?

时间:2019-03-05 07:13:31

标签: sql-server dapper dapper-extensions

有什么方法可以在SQL Server中自动更新修改的日期时间。

我不想使用触发器。我也想避免在调用SQL查询时通过应用程序提供值。

在SQL或Dapper等程序中是否有任何支持。

3 个答案:

答案 0 :(得分:2)

如果要跟踪数据库中的更改,可以使用一个称为

的功能。

系统版本的时间表,如here所述。

  

使用时间表,除了能够查询该行的完整历史记录之外,您还可以照常查询该行的最新状态

如果您有兴趣保留数据更改历史记录,这将非常方便

答案 1 :(得分:0)

如果要完全在SQL Server端处理此问题,则实际上与Dapper或Dapper扩展无关。看起来您正在寻找的方法是行版本控制。

您可以考虑使用rowversion(不建议使用旧的timestamp)数据类型,如here所述。它会自动填充值,无需从应用程序输入。

  

是一种数据类型,它公开了数据库中自动生成的唯一二进制数。 rowversion通常用作版本标记表行的机制。存储大小为8个字节。 rowversion数据类型只是一个递增数字,并不保留日期或时间。要记录日期或时间,请使用datetime2数据类型。

如上面引文和评论中所述,实际上这不是每个发言者的约会时间。

答案 2 :(得分:0)

我可以使用临时表解决问题。我不确定这是否是一个优雅的解决方案。这是我的解决方法。

创建表:

CREATE TABLE extable4 (PriKey int PRIMARY KEY, ColValue varchar(200)
, [ModifiedDateTime] datetime2 (2) GENERATED ALWAYS AS ROW START  
, [ModifiedExpiryDateTime] datetime2 (2) GENERATED ALWAYS AS ROW END HIDDEN 
, PERIOD FOR SYSTEM_TIME (ModifiedDateTime,[ModifiedExpiryDateTime])  
 ) ;

插入一条记录,但不向ModifiedDatetime提供输入。

insert into extable4(PriKey,ColValue) values(1,'Ver 1');

ModifiedDateTime填充了systime。

update extable4 set ColValue='Ver 1.1' where PriKey=1;

ModifiedDateTime现在更新了。 :)