2012-09-26 88 views
3

在一些頻繁寫入的日誌表中,我希望能夠存儲相對順序,以便我可以在這些表之間進行合併,並獲取事件實際發生的順序英寸用於創建/更新日期的Sql時間戳

DATETIME2的分辨率是缺乏。幾行將得到完全相同的日期,因此無法確定首先發生的事件。 因爲排序應該適用於多個表格,所以按ID排序已經結束。

然後我開始看時間戳。這適用於更新日期,但它不適用於創建日期,因爲每個表只能有一個時間戳列,並且會自動更新。

這是用於Microsoft Sql Server 2008.

有什麼建議嗎?

回答

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值將始終是不同的。

+0

而且,如果重複的創建列值有問題,則可以使用INSERT觸發器來設置Created以匹配初始更新值。 – GilM