首页 > 解决方案 > SSIS - 从多个数据库导入相同的数据

问题描述

我想将数据从具有相同结构的表(在许多不同的源数据库中)复制并合并到目标数据库中具有相似结构的单个表中。有时我需要添加或删除源数据库。

目前,这是使用包含 OLEDB 源和 SQL 查询的数据流任务来实现的,在该 SQL 查询中,我从中提取的每个数据库都有一个 UNION。每个 UNION 中有相当多的 SQL,因此,如果我需要添加字段,我需要向每个 UNION 添加相同的附加 SQL。同样,当我添加或删除源数据库时,我需要添加或删除 UNION。

我希望,与其使用带有大量重复代码的 UNION,不如使用 Foreach 循环容器来执行包含在变量中的 SQL,使用参数替换数据库的名称和其中的其他数据库相关项每次迭代的 SQL,但我遇到了问题,因为我假设循环中的数据流任务无法解释传入的字段,因为使用的是有效的动态 SQL。

关于如何在不复制大量 SQL 的情况下最好地实现这一目标的任何建议?

标签: sql-serverssis

解决方案


听起来您已经弄清楚了从数据库移动到数据库的循环。只要从数据库到数据库的表模式相同(除了提到的名称),这应该适合您。

在 For Each Loop 容器中,创建一个脚本任务或一个执行 SQL 任务,无论您使用哪个更舒服。

使用该任务动态生成 OLE DB 源查询的 SQL,更改每次迭代的客户代码前缀。将 SQL 文本分配给变量,可以直接在脚本任务中,也可以通过将执行 SQL 任务的结果集(结果集是查询文本)分配给变量。

在您的数据流任务中,在 OLE DB 源中,在数据访问模式下选择“来自变量的 SQL 命令”。选择您在上一个任务中使用查询填充的变量。

您还需要处理在迭代之间更改连接字符串,但是,听起来您已经掌握了该部分的句柄。


推荐阅读