我使用SSIS包将表列和数据从一个数据库移动到另一个数据库。
服务器A,数据库A,表A
服务器B,数据库B,表B(但仅包含表A中的选定列)
我使用了OLEDB源和OLEDB目的地的数据流任务。派生列以及在SERVER B中的表B中创建新的日期列。我需要自动执行此操作以使用SQL作业将表A从SERVER A加载到表B(表A中的选定列)到服务器B中。 请任何人都可以建议我如何将数据库加载作为一个循环。
感谢。
答案 0 :(得分:1)
我将向您展示如何从DatabaseA的50个表中获取所有列,并使用SSIS将它们加载到DatabaseB中。那个包看起来像这样。
我将解释逻辑流程。
第一个执行SQL任务将从信息模式中获取表的列表。
TABLE_SCHEMA|TABLE_NAME
MySchemaA |MyTableA1
MySchemaA |MyTableA2
我们将获取该列表并将其另存为ResultSet
变量。保存后,我们可以使用Foreach循环ADO枚举器任务遍历ResultSet
。对于每个循环,我们将从一行中的值映射到TABLE_SCHEMA
和TABLE_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,具有相同名称的目标表。
查看here和here以获取有关如何使用Foreach循环ADO枚举器映射变量的更多详细示例。
现在......
我确实读过你想要的
使用表A中的选定列
如果您足够幸运,需要在DatabaseA的50个表中的每个表中使用完全相同的列集,那么只需将上面查询中的*
更改为[ColumnA],[ColumnB],[ColumnC]
即可。如果您碰巧需要为每个表使用不同的列集,那么......这可能会有问题。您需要创建一个TABLE_NAME | ColumnSet
列表并将其集成到您的循环中......好吧......这听起来像是很多工作!你可以在编码之前手动完成50。希望这有帮助!
答案 1 :(得分:0)
这意味着查询是可预测的以及目标表名。
您可以通过将其名称放在表格中或从INFORMATION_SCHEMA
获取表格来循环显示所需的表格。
在此循环容器中,您可以从INFORMATION_SCHEMA
构造源查询,然后在Data Flow
use表达式中创建源组件以使用您的查询。