我正在编写一个SSIS包,它循环通过收集库存信息的服务器列表。
包(理论上)应该
获取服务器列表
连接到foreach中的每一个
为库存目的运行一个简单查询并将信息保存到临时表
将此信息记录到静态服务器
我遇到的问题是该软件包只更改了一次连接,然后通过整个foreach维护这种连接。
初始连接是
Data Source=(localdb)\v11.0;Initial Catalog=master;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;
这个连接实际上从未使用过,除非让SSIS相信在包开始时服务器上已经存在临时表,即使包本身创建了表。
在此连接的属性中,我已设置
ServerName = @[User::ServerName]
InitialCatalog = @[User::Database]
数据库变量实际上只是硬编码到" master",但如果需要更改,我会使用变量进行简单的更改。
无论如何,我查询我的静态连接以获取服务器列表,并将结果集映射到变量User :: ServerList(属于object类型)。
在foreach循环中,我将枚举器设置为Foreach ADO Enumerator,其中包含ADO对象源变量User :: ServerList。在变量映射中,我在索引0处有User :: ServerName,它是一个string类型的变量,最初没有设置为任何东西。
我已逐步完成每个foreach循环迭代,并且ServerName变量确实在每个循环中发生变化。连接更改为第一个服务器连接并愉快地执行其职责(我已通过手动检查服务器上的临时表结果来确认这一点,表已创建并填充)。
然而,在下一次迭代时 - 我看到ServerName变量更改为相应的服务器,并且程序包愉快地执行...但它并没有实际更改动态连接,我通过查询下一个服务器发现了这一点看到桌子不存在。我去了之前的服务器并再次查询它,果然桌子仍然存在,并且我保持在表格中的Date变量已经变得稍微更近了。
foreach循环中每个任务的连接被设置为" DynamicConnection"并且我确定它在第一次迭代时确实发生了变化,因为列表中的第一个服务器不是 localdb。
有关为何会出现这种情况的任何想法吗?
感谢您的时间。