创建/更新日期的Sql时间戳

时间:2012-09-26 09:56:46

标签: sql sql-server sql-server-2008 tsql

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

缺少DateTime2的分辨率。几行将获得完全相同的日期,因此无法先判断出哪一行。 因为排序应该跨多个表,所以按ID排序。

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

这适用于Microsoft Sql Server 2008.

有什么建议吗?

1 个答案:

答案 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值将始终不同。