导航

最近,在开发SSIS2008包的时候遇到一个问题,系统需要从Excel文件中导入数据到SQL Server的表中,但是,Excel文件中有些重复数据,而数据库中的表结构要求插入的数据不能重复,这样数据流任务在向表中插入数据的时候会出错以至于无法插入任何一条数据到相应的表中。

当时想到的第一种解决方案是,在数据库中增加一个可以插入重复数据的其他结构都和目标表相同的表,然后将数据导到该表中,添加“执行SQL任务”删除重复数据,然后再添加一个数据流任务将刚保存数据的表中的数据导入到目标表中。这种方法可以解决这个问题,不过这样数据库中就必须增加一个表,我的想法是尽量不改动数据库结构来实现这个任务,于是乎我想到了下面这个方案。

将出错的“OLEDB 目标任务”的输出错误的方式改成重新定向行,并添加一个“Excel 目标任务” 来接收这些错误行。如下图所示。

修改前数据流任务截图:

修改"OLE DB Destination"任务(用的是英文版,该任务即上面提到的OLEDB 目标任务),将错误输出方式改成重定向行:

 

数据流中添加一个“Excel 目标任务”(即下图中的"Get Duplicate Datas" 任务)来获取"OLE DB Destination"任务输出的重复行: 

 

用这种方式可以保证将正确的数据导入到目标表中,并且将重复的数据导入到了另一个Excel中,当然,用这种方法可以将重复数据导入到任何一种目标数据源中,不限于Excel。它可以避免因改动数据库而带来的不便,还对重复数据进行了保存。