在一些经常写入的日志记录表中,我希望能够存储相对顺序,以便我可以在这些表之间进行联合,并获得实际发生的事情的顺序。
缺少DateTime2的分辨率。几行将获得完全相同的日期,因此无法先判断出哪一行。 因为排序应该跨多个表,所以按ID排序。
然后我开始查看时间戳。这适用于更新日期,但它不适用于创建日期,因为每个表只能有一个时间戳列,并且它会自动更新。
这适用于Microsoft Sql Server 2008.
有什么建议吗?
答案 0 :(得分:4)
您可以使用另一列binary(8)
(与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
值将始终不同。