我正在尝试在SQL Server 2008中设置一个“主”SSIS包来运行其他“子”包。在开发'子'软件包时,我们将所有软件包放在磁盘上,以便我们可以轻松地对它们进行调试,因此我们在开发过程中使用文件连接器,可以很好地监控进度。
部署时,我们将子包部署到SQL Server上的SSIS,然后通过并更改所有执行包任务以使用位置值“SQL Server”并设置PackageName。完成后,我们部署'master'。
我想要做的是在Execute Package Task上使用Expression来设置连接属性,以便我们可以根据环境配置它。我们已经使用视图设置了SQL Server配置数据库,该视图检查查询的主机名并返回取决于查询的不同值。
答案 0 :(得分:3)
你有选择。您使用表达式时处于正确的思维状态,但您也可以从使用配置中受益。
要使用表达式,您需要使用脚本任务或执行SQL任务来返回您想要处理的文件列表。
您必须将每个返回的值分配给它自己传递给表达式的变量,或者使用FOR EACH循环并遍历列表,每次都指定子包的位置。
另一种选择是使用配置。我的偏好是在SSIS中使用配置表。如果在每个环境中都有相同的包列表,则可以传入根目录并使用表达式: @ [User :: RootPackagePath] +“\ PackageName.dtsx”
或者,您可以在配置表中为每个子包创建一条记录,然后将其传递到包中。
我成功地将配置包配置为通过配置更改从文件系统调用包然后SQL。
我只需要为每个传递Connection和PackageName。使用SQL,它需要来自连接管理器的名称(在我的情况下为。\ SQL2008R2)和包名称(\ Package1)。对于文件系统,PackageName被清空,连接是连接管理器中的FileConnection。
您必须将两者都放在包中,但是要在两者之间切换。