如果利用SQL Server 2008新特性之CDC

http://tech.ddvip.com   2008年04月16日    社区交流

内容摘要:Change Data Capture(CDC)是SQL Server 2008的一个新特性,它可以记录SQL Server表的插入、更新和删除等表修改活动。利用该新特性的一个很好的例子就是对某个数据仓库进行定期更新。

如果利用SQL Server 2008新特性之CDC

  我们现在接着用这个例子来演示如何定期抽取被改动的行。我们会新增一个表来记录结束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)

  运行了上面的查询之后,插入一行,然后再一次运行这个查询。你的查询结果会显示只有一行被改动过: 

如果利用SQL Server 2008新特性之CDC

来源:IT专家网    作者:Echo    责编:豆豆技术应用

正在加载评论...