使用SSIS将数据从多个数据库加载到另一个服务器

时间:2016-11-22 16:54:02

标签: ssis

我使用SSIS包将表列和数据从一个数据库移动到另一个数据库。

服务器A,数据库A,表A

服务器B,数据库B,表B(但仅包含表A中的选定列)

我使用了OLEDB源和OLEDB目的地的数据流任务。派生列以及在SERVER B中的表B中创建新的日期列。我需要自动执行此操作以使用SQL作业将表A从SERVER A加载到表B(表A中的选定列)到服务器B中。 请任何人都可以建议我如何将数据库加载作为一个循环。

感谢。

2 个答案:

答案 0 :(得分:1)

我将向您展示如何从DatabaseA的50个表中获取所有列,并使用SSIS将它们加载到DatabaseB中。那个包看起来像这样。

enter image description here

我将解释逻辑流程。

第一个执行SQL任务将从信息模式中获取表的列表。

TABLE_SCHEMA|TABLE_NAME
MySchemaA   |MyTableA1
MySchemaA   |MyTableA2

我们将获取该列表并将其另存为ResultSet变量。保存后,我们可以使用Foreach循环ADO枚举器任务遍历ResultSet。对于每个循环,我们将从一行中的值映射到TABLE_SCHEMATABLE_NAME SSIS变量。然后,我们将在动态SQL语句中使用这些值。第二个执行SQL任务是从SQLStatement变量获取它的命令。我们通过以下表达式设置该变量...

"SELECT * INTO DatabaseB." + @[User::TABLE_SCHEMA] + "." + @[User::TABLE_NAME] +" FROM DatabaseA."+ @[User::TABLE_SCHEMA] + "." + @[User::TABLE_NAME]

因此,对于每个循环,将模式和表名注入到SQL语句中,并且该表是SELECT * INTO,具有相同名称的目标表。

查看herehere以获取有关如何使用Foreach循环ADO枚举器映射变量的更多详细示例。

现在......

我确实读过你想要的

  

使用表A中的选定列

如果您足够幸运,需要在DatabaseA的50个表中的每个表中使用完全相同的列集,那么只需将上面查询中的*更改为[ColumnA],[ColumnB],[ColumnC]即可。如果您碰巧需要为每个表使用不同的列集,那么......这可能会有问题。您需要创建一个TABLE_NAME | ColumnSet列表并将其集成到您的循环中......好吧......这听起来像是很多工作!你可以在编码之前手动完成50。希望这有帮助!

答案 1 :(得分:0)

这意味着查询是可预测的以及目标表名。

您可以通过将其名称放在表格中或从INFORMATION_SCHEMA获取表格来循环显示所需的表格。

在此循环容器中,您可以从INFORMATION_SCHEMA构造源查询,然后在Data Flow use表达式中创建源组件以使用您的查询。