如何在不更改记录数据的情况下更新sql server timestamp列

Ron*_*rby 7 .net c# sql sql-server

我有一个带有时间戳列的SQL Server表.有没有办法强制时间戳列更改而不实际更新记录?

我问的原因是因为我想在子表中插入/更新/删除记录时更改记录的时间戳.

时间戳可能不是执行此操作的最佳方式.如果没有,我该怎么办?我不想使用datetime,因为我觉得这不是一个很好的版本控制方式.我不想使用整数,因为我不想读取值来增加它.

建议?

Mar*_*ett 9

我不想使用整数,因为我不想读取值来增加它.

UPDATE Table SET
    IntColumn = IntColumn + 1
Run Code Online (Sandbox Code Playgroud)

虽然这在技术上需要读取,但我没有看到任何问题.

您可以随时更新为相同的值:

UPDATE Table SET
    SomeColumn = SomeColumn
Run Code Online (Sandbox Code Playgroud)

这也将触发rowversion更新.

附加:您可以使用子项的最大rowversion执行视图:

SELECT Parent.*, MaxChildRowVersion as ChildVersion
FROM Parent
JOIN (
    SELECT ParentId, MAX(RowVersion) as MaxChildRowVersion
    FROM Child
    GROUP BY ParentId
) as Child ON
     Parent.ParentId = Child.ParentId
Run Code Online (Sandbox Code Playgroud)

但是,不,你不能直接更新rowversion列(虽然你可以使用@@ DBTS,binary(8)和INSTEAD OF触发器实现自己的可更新...)

你能举出你最后一点的例子吗?听起来很有希望.

不,真的没有.;)当您可以更改为相同的值或使用视图时,这是太多的工作.这是2个最简单的选择.

但是,是完整的,二进制(8)@@ DBTS的默认(返回数据库的版本号),和AFTER UPDATE触发器还更新了二进制列到新的@@ DBTS列会给你一个伪-rowversion类型,然后您可以手动更新.它不会比仅仅将其他列更新为相同的值更快或更好.