3

頻繁に書き込まれるいくつかのログ テーブルでは、相対的な順序を保存できるようにして、これらのテーブルを統合し、実際に発生した順序を取得できるようにしたいと考えています。

DateTime2 の解像度が不足しています。いくつかの行はまったく同じ日付になるため、どちらが最初に発生したかを知る方法はありません。並べ替えは複数のテーブルで機能するはずなので、ID による並べ替えは無効です。

次に、タイムスタンプを見始めました。これは更新された日付には機能しますが、作成された日付には機能しません。テーブルごとに 1 つのタイムスタンプ列しか持てず、自動的に更新されるためです。

これは Microsoft Sql Server 2008 用です。

助言がありますか?

4

1 に答える 1

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値は常に異なります。

于 2012-09-26T10:06:40.737 に答える