SSIS 2012 元数据在重新部署时不会刷新

Val*_*rie 6 sql-server ssis sql-server-2012 ssdt

我有三个系统:DEV、UAT、PROD,都运行 SQL 2012 Enterprise。我有现有的包可以命中这些系统上的对象。每次我必须进行影响元数据的更改时,仅更新目标系统上的对象,然后更新指向系统的 SSIS 包,然后在系统上重新部署该包是不够的。即使在重新部署之前会更新包以处理新的元数据,我仍然必须进入每个系统并再次更新包,然后才能识别新的元数据。

这种行为对我来说是新的。在 BIDS 2008 中,一个系统上元数据的刷新将持续到它部署到的任何系统。现在,如果我在部署之前更改连接管理器,我必须返回并重新刷新元数据,然后才能发送它。似乎每个连接设置的元数据被保留,并且在更新包时不会更新。

一个例子,我可以清楚地说明这一点:我在所有三个系统上的目标表中添加了一列。我在指向 DEV 时更新包以反映更改,然后进行部署。到现在为止还挺好。然后我更新连接管理器以指向 UAT,并在那里部署更改的包。在这一点上,我希望不需要刷新元数据,因为 UAT 中目标表的模式与 DEV 中的模式相匹配,包在上次刷新时指向该模式。但是,该包就像未更新一样,需要在明确指向该系统的同时刷新其元数据才能工作。

为了解决这个问题,我在连接管理器上添加了一个由 System::MachineName 确定的 ServerName 属性的表达式,认为问题是在我正在开发的机器上更改连接管理器会立即触发检查那里的对象,即使延迟验证打开。没有这样的运气;它仍然显示相同的行为。

我在网上找不到太多关于此的信息,以确定它是 SSDT 2012 的预期行为还是我做错的事情或真正的错误。

任何人都对这个问题有任何见解?

Tom*_*m V 8

老实说,您不应该在部署之前编辑包以指向另一个环境。请查看包配置以了解在不编辑包本身的情况下部署包的方法。

可能您的连接字符串和其他设置应该只是从配置文件中读取的变量。

由于您使用的是 SQL 2012,您可能应该使用环境(感谢 @MartinSmith)


小智 0

在数据工具打开数据流中打开包,打开所有异步控件,然后单击“确定”并关闭包。

重新构建解决方案并部署

  • 更多的解释将有助于建立探索答案的信心。 (2认同)