如何在SSIS中通过Foreach循环容器批量实现表数据迁移?
无需为每张表单独创建数据流任务,完全可以实现批量数据流转
直接在你已有的Foreach Loop Container内添加一个Data Flow Task,配合变量动态指定源表和目标表即可,具体操作步骤如下:
配置数据流中的源组件
以OLE DB Source为例,选择源连接管理器后,将数据访问模式改为SQL命令,输入动态查询语句:SELECT * FROM ?点击「参数」按钮,将参数位置0映射到你定义的
TableName变量,这样每次循环都会自动替换为当前遍历到的表名。配置数据流中的目标组件
以OLE DB Destination为例,选择目标连接管理器后,将数据访问模式改为表或视图 - 变量名,然后选择TableName变量作为目标表名。
因为源表和目标表结构完全一致,直接切换到「映射」标签,系统会自动完成列映射(如果有个别列不匹配,手动调整即可)。处理标识列的特殊设置
由于目标表带有标识定义,需要确保数据插入时的标识值处理符合需求:- 打开目标组件的「高级编辑器」,切换到「输入和输出属性」标签
- 展开目标表的输入列,找到标识列,将其「忽略」属性设为
False - 在目标连接管理器的属性中,勾选「保留标识」选项(确保源表的标识值能正确插入到目标表的标识列中)
可选:优化索引性能
如果目标表有大量索引,为了提升批量插入的速度,可以在循环内增加两个Execute SQL Task:- 数据流任务之前:执行禁用目标表索引的SQL(比如
ALTER INDEX ALL ON ? DISABLE,同样映射TableName变量) - 数据流任务之后:执行重建目标表索引的SQL(比如
ALTER INDEX ALL ON ? REBUILD)
- 数据流任务之前:执行禁用目标表索引的SQL(比如
内容的提问来源于stack exchange,提问作者JMG
相关产品推荐
相关产品推荐

