如果利用SQL Server 2008新特性之CDC
http://tech.ddvip.com 2008年04月16日 社区交流
内容摘要:Change Data Capture(CDC)是SQL Server 2008的一个新特性,它可以记录SQL Server表的插入、更新和删除等表修改活动。利用该新特性的一个很好的例子就是对某个数据仓库进行定期更新。

我们现在接着用这个例子来演示如何定期抽取被改动的行。我们会新增一个表来记录结束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)
运行了上面的查询之后,插入一行,然后再一次运行这个查询。你的查询结果会显示只有一行被改动过:

来源:IT专家网 作者:Echo 责编:豆豆技术应用
- SQL Server 2008 教程
- SQL Server 2005 教程
- SQL Server 安全设置
- SQL Server 故障解决
- SQL Server 安装配置
- SQL Server 备份恢复
- SQL Server 性能调优
- SQL Server 存储过程
- SQL Server 函数
- SQL Server 事务
- SQL Server 查询
- SQL Server 索引
- SQL Server 入门教程
- SQL Server 数据类型
- SQL Server 数据库表
- SQL Server T-SQL
- SQL Server 语句
- SQL Server 死锁
- SQL Server 加密
- SQL Server 数据库连接
- SQL Server 数据仓库
- SQL Server 数据库管理
- 更多SQL Server 专题>>>