Ron*_*rby 7 .net c# sql sql-server
我有一个带有时间戳列的SQL Server表.有没有办法强制时间戳列更改而不实际更新记录?
我问的原因是因为我想在子表中插入/更新/删除记录时更改记录的时间戳.
时间戳可能不是执行此操作的最佳方式.如果没有,我该怎么办?我不想使用datetime,因为我觉得这不是一个很好的版本控制方式.我不想使用整数,因为我不想读取值来增加它.
建议?
我不想使用整数,因为我不想读取值来增加它.
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类型,然后您可以手动更新.它不会比仅仅将其他列更新为相同的值更快或更好.
| 归档时间: |
|
| 查看次数: |
10428 次 |
| 最近记录: |