在一些经常写入的日志表中,我希望能够存储一个相对顺序,以便我可以在这些表之间合并,并获得事情实际发生的顺序。
DateTime2 的分辨率不足。几行将获得完全相同的日期,因此无法判断哪个先发生。因为排序应该跨多个表工作,所以按 Id 排序已经过时了。
然后我开始查看时间戳。这适用于更新日期,但不适用于创建日期,因为每个表只能有一个时间戳列,并且它会自动更新。
这适用于 Microsoft Sql Server 2008。
有什么建议么?
在一些经常写入的日志表中,我希望能够存储一个相对顺序,以便我可以在这些表之间合并,并获得事情实际发生的顺序。
DateTime2 的分辨率不足。几行将获得完全相同的日期,因此无法判断哪个先发生。因为排序应该跨多个表工作,所以按 Id 排序已经过时了。
然后我开始查看时间戳。这适用于更新日期,但不适用于创建日期,因为每个表只能有一个时间戳列,并且它会自动更新。
这适用于 Microsoft Sql Server 2008。
有什么建议么?
您可以使用键入为binary(8)
(same as rowversion
) 并默认为的另一列来模拟它@@DBTS
:
create table TX (
ID int not null,
Updated rowversion not null,
Created binary(8) not null constraint DF_TX_Created DEFAULT (@@DBTS)
)
go
insert into TX (ID)
values (1),(2)
go
update TX set ID = 3 where ID = 1
go
insert into TX (ID)
values (4)
go
select * from TX
结果:
ID Updated Created
----------- ------------------ ------------------
3 0x00000000000007D3 0x00000000000007D0
2 0x00000000000007D2 0x00000000000007D0
4 0x00000000000007D4 0x00000000000007D3
笔记:
这些Created
值将始终等于rowversion
分配的最后一个值,因此在某种意义上,与Updated
值相比,它们将“滞后”。
此外,来自单个语句的多个插入将接收相同 Created
的值,而Updated
值将始终是不同的。