这是可能的,但不是以内置方式,我是一个害怕。你将不得不手工重建时间线。
鉴于变更跟踪表提供了tran_end_time(即属性值应该被视为持续存在的时间),您必须进行一次查询,以获取表状态的所有不同时间段,加入被跟踪的属性发生变化,然后转动(以与表格相同的形式进行演示)。不要忘记与表状态本身结合,以获取未完成更改/跟踪的值。
最终结果,简化的,应该像
RN PK PropA PropB FromDate ToDate
1 1 'Ver1' 'Ver1' 2012-01-01 09:00 2012-01-02 08:00
2 1 'Ver1' 'Ver2' 2012-01-02 08:00 2012-01-03 07:00
3 1 'Ver2' 'Ver2' 2012-01-03 07:00 *getdate()*
4 2 'Ver1' 'Ver1' 2012-01-01 05:00 2012-01-02 06:00
5 2 'Ver1' 'Ver2' 2012-01-02 06:00 2012-01-03 01:00
6 2 'Ver2' 'Ver2' 2012-01-03 01:00 *getdate()*
说明该GETDATE()是有效的,如果不删除的行在这种情况下它应与删除日期被取代
编辑,为2个用例。 第一个点是很容易解决它的构造时间对象图然后过滤的问题:
declare @pointInTime datetime = '20120102 10:00';
select * from Reconstructed_TG where FromDate <= @pointInTime and @pointInTime < ToDate
第二点,可以很容易地与except子句生成,如你指出。 给出上述查询:
declare @pointInTimeA datetime = '20120102 10:00';
declare @pointInTimeB datetime = '20120103 01:00';
select * from Reconstructed_TG where FromDate <= @pointInTimeA and @pointInTimeA < ToDate
EXCEPT
select * from Reconstructed_TG where FromDate <= @pointInTimeB and @pointInTimeB < ToDate
尚except
子句只呈现了具有至少一个不同的列值的行;我不知道这些信息对人眼是否真的有意义。根据您的需要,直接在cdc
数据上运行的查询可能更合适。
你是什么意思你想计算差异?示例输出? – Jaguar 2012-08-20 07:48:24
@Jaguar:增加了两个用例。谢谢! – Legend 2012-08-20 22:19:23