如果利用SQL Server 2008新特性之CDC
2008-04-16 09:53:39 来源:WEB开发网我们现在接着用这个例子来演示如何定期抽取被改动的行。我们会新增一个表来记录结束LSN和一个新函数来从表中获取结束LSN。通过这样做,我们可以获取自上一次运行ETL过程之后的所有改动。
以下是引用片段:
createtabledbo.customer_lsn(
last_lsnbinary(10)
)
createfunctiondbo.get_last_customer_lsn()
returnsbinary(10)
as
begin
declare@last_lsnbinary(10)
select@last_lsn=last_lsnfromdbo.customer_lsn
select@last_lsn=isnull(@last_lsn,sys.fn_cdc_get_min_lsn('dbo_customer'))
return@last_lsn
end
我们会改动上面的代码,添加函数get_last_customer_lsn(),插入或更新一行来保存结束LSN:
以下是引用片段:
declare@begin_lsnbinary(10),@end_lsnbinary(10)
--getthenextLSNforcustomerchanges
select@begin_lsn=dbo.get_last_customer_lsn()
--getthelastLSNforcustomerchanges
select@end_lsn=sys.fn_cdc_get_max_lsn()
--getthenetchanges;groupallchangesintherangebythepk
select*fromcdc.fn_cdc_get_net_changes_dbo_customer(
@begin_lsn,@end_lsn,'all');
--getallindividualchangesintherange
select*fromcdc.fn_cdc_get_all_changes_dbo_customer(
@begin_lsn,@end_lsn,'all');
--savetheend_lsninthecustomer_lsntable
updatedbo.customer_lsn
setlast_lsn=@end_lsn
if@@ROWCOUNT=0
insertintodbo.customer_lsnvalues(@end_lsn)
运行了上面的查询之后,插入一行,然后再一次运行这个查询。你的查询结果会显示只有一行被改动过:
更多精彩
赞助商链接