WEB开发网
开发学院数据库MSSQL Server 如果利用SQL Server 2008新特性之CDC 阅读

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

 2008-04-16 09:53:39 来源:WEB开发网   
核心提示: 我们现在接着用这个例子来演示如何定期抽取被改动的行,我们会新增一个表来记录结束LSN和一个新函数来从表中获取结束LSN,如果利用SQL Server 2008新特性之CDC(6),通过这样做,我们可以获取自上一次运行ETL过程之后的所有改动,插入或更新一行来保存结束LSN:以下是引用片段:

如果利用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

上一页  1 2 3 4 5 6 

Tags:如果 利用 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接