获取修改了的数据一般有三种方式:

1.使用一个datetime列

缺点:是并不是每个表都会有个‘修改日期’字段来让你判断行是否修改过

使用实例可以参考我之前的文章:SSIS: 使用最大ID和最大日期来增量更新表

2.MSSQL 自带的功能CDC (change data capture)

CDC使用 SQL Server Agent把变更的数据写到另外一个表中。

缺点: 如果数据库变动频繁会占用大量的磁盘空间

1) 启用CDC

注意:只有开发板和企业版提供CDC功能

USE [AdventureWorksDW2012]
GO EXEC sys.sp_cdc_enable_db
GO

2) 开启DimAccount的CDC

EXEC sys.sp_cdc_enable_table
@source_schema = 'dbo',
@source_name = 'DimAccount',
@role_name = 'MyRole',
@filegroup_name = 'Primary',
@supports_net_changes = 1
GO

此时我们可以看到System Tables里面多了很多表

其中 cdc.dbo_DimAccount_CT 就是记录变更的表

接着我们改变DimAccount表中的一条记录,再查看 cdc.dbo_DimAccount_CT 表

我们发现他复制了整行修改前的记录和修改后的记录

其中 _$operation列是我们操作的顺序,可以残出来那个是旧的哪个是新的。

禁止DimAccount的 CDC

EXECUTE sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'DimAccount',
@capture_instance = N'dbo_DimAccount';

3.MSSQL 自带的功能 change tracking

只记录修改的key ,大多数情况下这个方法不错。 更改记录可以设置定期删除。

1) 开启CHANGE_TRACKING功能

USE [AdventureWorksDW2012]

ALTER DATABASE AdventureWorksDW2012
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);--自动清理前两天的记录 ALTER TABLE [dbo].[DimAccount]
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);

2) 同上面一样修改Dimaccount并查看效果

这里变更记录并不是存放在表里面,而是通过一个函数获得

USE [AdventureWorksDW2012]

SELECT *
FROM CHANGETABLE(CHANGES [dbo].[DimAccount], 0) AS T

如图 AccountKey 被记录了下来

与CDC比较

参考文档

sys.sp_cdc_disable_table (Transact-SQL)

https://msdn.microsoft.com/zh-cn/library/bb510702

SSIS:捕获修改了的数据的更多相关文章

  1. SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表

    该文章为原创,日后可能会根据实际开发经验和网友评论,进行相应地方修改,为获得最新博客动态,望在转发博客的时候注明出处. 触发器要实现的功能: (1)获取对表Table1数据操作操作类型(insert. ...

  2. IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据

    使用IntelliJ IDEA 在网页修改数据,但是在浏览器刷新的时候,不能读取到修改之后的数据? 解决办法:tomcat配置中,On frame deactivation属性选择Update cla ...

  3. LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据

    http://www.cnblogs.com/yukaizhao/archive/2010/05/13/linq_to_sql_1.html LINQ和 LINQ to SQL 都已经不是一个新事物了 ...

  4. 使用ADO对象添加、修改、删除数据

    使用ADO对象对数据库中的数据进行添加.修改和删除等操作.首先创建一个ADO类,通过ADO类连接数据库,并打开记录集.例如,使用ADO对象添加.修改.删除数据,程序设计步骤如下:(1)创建一个基于对话 ...

  5. Mysql修改已有数据的字符集

    Mysql修改已有数据的字符集 问题 在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的M ...

  6. 数据库(概念、语法、DBMS、SQL语言:创建数据库、表格,添加、修改、删除数据记录)

    关系型数据库:以表作为实体,以主键和外键关系作为联系的一种数据结构. 主键:在关系型数据库中,用一个唯一的标识符来标志每一行,这个标识符就是主键.主键有两个特点:非空和不能重复. 外键:在关系型数据库 ...

  7. CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?

    这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?分值:30 来源: 2014sctf 难度:难 参与人数:3918人 Get Flag:384人 答题人数 ...

  8. FDMEMTABLE将修改后的数据序列为JSON

    FDMEMTABLE将修改后的数据序列为JSON procedure TForm1.Button3Click(Sender: TObject); var memtable: TFDMemTable; ...

  9. JMeter之修改Sampler响应数据的编码格式

    转 JMeter之修改Sampler响应数据的编码格式 问题:JMeter的sampler响应数据中有中文时,会解析出错. JMeter的Sampler中的响应数据默认的编码格式是:ISO-8859- ...

随机推荐

  1. MFC对话框屏蔽Enter和ESC键

    MFC对话框屏蔽Enter和ESC键参考:http://www.docin.com/p-122354833.html 方法一重载PreTranslateMessage函数 BOOL CXXDlg::P ...

  2. Codeforces 707D Persistent Bookcase(时间树)

    [题目链接] http://codeforces.com/problemset/problem/707/D [题目大意] 给出一个矩阵,要求满足如下操作,单个位置x|=1或者x&=0,一行的数 ...

  3. poj2636---Electrical Outlets(插线板)

    #include <stdio.h> #include <stdlib.h> int main() { int n,nc,i; scanf("%d",&am ...

  4. current imporant Posts

    CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete) http://www.centos.org/docs/5/htm ...

  5. swift3.0 构造器、析构方法(3)

    构造和析构是两种特殊的方法,在对象进行初始化的时候 使用构造,在对象的释放操作中,使用析构. 构造器的定义: init (){ //代码 } init(name:String){ //代码 } 在构造 ...

  6. Xcode5新特性

    小引: 自从北京时间2013年06月11日苹果发布Xcode 5 Developer Preview 1,到现在,苹果也放出了Xcode 5 Developer Preview 3,速度还是蛮快的,希 ...

  7. web前端学习之路

    test 随着自己对于web前端知识了解的越多,越来越发现自己真的好菜 一脸茫然阶段 两年前大学接触网页设计,那时对于网页设计一窍不通,只是看了一本自己大学编的一本入门教材,我甚至不知道那些网页设计的 ...

  8. Web页面引入文档编辑器报风险

    Web页面引入文档编辑器会报风险,则需要以下操作: <system.web> <httpRuntime requestValidationMode="2.0" / ...

  9. sql server把一个表中数据复制到另一个表

    insert into A(ID,Name,Sex,Address,DID,...) from (select ID,Name,Sex,Address, 5 DID)

  10. headfirst之装饰模式

    class A A.hello class B extends A B.hello = A.hello+B 装饰模式:子类对父类想要包装的方法进行重写,使之成为加强版