3

在一些经常写入的日志表中,我希望能够存储一个相对顺序,以便我可以在这些表之间合并,并获得事情实际发生的顺序。

DateTime2 的分辨率不足。几行将获得完全相同的日期,因此无法判断哪个先发生。因为排序应该跨多个表工作,所以按 Id 排序已经过时了。

然后我开始查看时间戳。这适用于更新日期,但不适用于创建日期,因为每个表只能有一个时间戳列,并且它会自动更新。

这适用于 Microsoft Sql Server 2008。

有什么建议么?

4

1 回答 1

4

您可以使用键入为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值将始终是不同的。

于 2012-09-26T10:06:40.737 回答