gpt4 book ai didi

c# - 如何在不更改记录数据的情况下更新sql server时间戳列

转载 作者:太空狗 更新时间:2023-10-29 20:02:13 24 4
gpt4 key购买 nike

我有一个带有时间戳列的 sql server 表。有没有办法在不实际更新记录的情况下强制更改时间戳列?

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

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

建议?

最佳答案

I don't want to use an integer, because I don't want to have to read the value to increment it.

UPDATE Table SET
IntColumn = IntColumn + 1

虽然这在技术上确实需要阅读,但我看不出有任何问题。

您总是可以更新为相同的值:

UPDATE Table SET
SomeColumn = SomeColumn

这也会触发 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

但是,不,您不能直接更新行版本列(尽管您可以使用@@DBTS、binary(8) 和 INSTEAD OF 触发器实现您自己的可更新...)

Could you give examples of your last point? It sounds promising.

不,真的不是。 ;) 当您只能更新为相同的值或使用 View 时,工作量太大了。这是最简单的 2 个选项。

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

关于c# - 如何在不更改记录数据的情况下更新sql server时间戳列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com