2012-09-26 1 views
3

자주 쓰여지는 몇 가지 로깅 테이블에서 이러한 테이블을 통합 할 수 있도록 상대적인 순서를 저장하고 실제로 발생 된 순서를 얻을 수 있기를 바랍니다 in.생성 날짜/업데이트 날짜에 대한 Sql 타임 스탬프

DateTime2의 해상도가 부족합니다. 몇몇 행은 정확한 날짜를 얻을 것이므로 어떤 일이 먼저 일어 났는지 알 수있는 방법이 없습니다. 정렬은 여러 테이블에서 작동해야하므로 ID별로 정렬하지 않습니다.

그런 다음 타임 스탬프를 살펴보기 시작했습니다. 이 방법은 업데이트 된 날짜에도 작동하지만 만든 날짜에는 작동하지 않습니다. 이는 테이블 당 타임 스탬프 열을 하나만 가질 수 있고 자동으로 업데이트되기 때문입니다.

이것은 Microsoft SQL Server 2008을위한 것입니다.

어떤 제안이 있습니까?

답변

4

당신은 @@DBTS 또 다른 (rowversion와 동일) binary(8)로 입력 열과 디폴트로 시뮬레이션 할 수 있습니다 :

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 값. Updated 값은 항상 별개의 것입니다 반면

또한, 하나의 문에서 여러 삽입은 같은 Created 값을 받게됩니다.

+0

중복 된 Created 열 값이 문제가되면 초기 업데이트 값과 일치하도록 Created를 설정하는 INSERT 트리거를 가질 수 있습니다. – GilM

관련 문제