SSIS - 动态循环多个数据库

Dan*_*ele 7 sql-server ssis etl dynamic-sql

我必须在一个独特的数据库中整合来自1000多个具有相同结构/表的数据库中的数据.可以每天添加和删除DB,因此我需要动态检索DB列表并运行动态生成的SQL查询以提取每个数据库的数据.

我设计了数据流,其中包含一个变量查询,如果使用静态值执行,该变量工作正常:

在此输入图像描述

使用SQL任务,我获取实例列表,我循环遍历它们并使用嵌套的Foreach循环/ SQL任务检索数据库名称并使用以下语句创建动态SQL(DB名称是匿名的):

选择'select'''+ name +'''作为DatabaseName,ID来自'+ name +'.[dbo].[Orders] as querytext FROM sys.databases WHERE name LIKE('XXX%_%');

这部分工作正常:

在此输入图像描述

如何使用SQL任务"执行SQL任务 - 获取查询文本"的结果作为查询在源"OLE DB源1"("数据流任务3"的一部分)中执行?

我尝试在SQL任务的结果集中映射一个Object变量"User :: SqlCommandFromSQLTask",然后将其设置为ADO对象源变量,并使用Script任务将其转换为字符串并将值传递给变量SqlStringFromSQLTask3(用作"OLE DB Source 1"中的源代码,但是我收到错误违反PRIMARY KEY约束,就好像数据流始终以我设置为默认值的静态值运行:

在此输入图像描述

在此输入图像描述

在此输入图像描述

虽然,如果我从变量面板中删除值,我会收到错误"没有为命令对象设置命令文本.",甚至将数据流的属性DelayValidation更改为false.

任何帮助深表感谢.

小智 1

当我使用 SSIS 连接到多个 SQL Server 机器时,我将这些 SQL Server 连接字符串存储在中央数据库的表中。然后,我使用该表的查询作为 foreach 循环数据流任务的输入。如果我们必须更改 SQL Server 连接字符串(确实发生了),我们只需使用最新值更新该表即可。