如何在执行包任务中动态设置PackageName?
我已经将包列表选择到用户变量中,并获得一个ForEach循环,其中包含一个脚本任务,显示我在那里的值... Dts.Variables["User::TgtPackage"].Value.ToString()
但我尝试过使用......
,但都不起作用
答案 0 :(得分:3)
自2008年以来,您在执行包任务中引用包的方式是在文件系统上或在SQL Server中。然后,执行包任务正在使用您的连接管理器
对于基于文件的连接管理器,您需要在文件Connection Manager的ConnectionString
属性上设置Expression。右键单击Connection Manager,在Properties窗格中找到Expressions部分,单击省略号并将ConnectionString映射到@[User::TgtPackage]
(假设TgtPackage的值是一个完全限定的路径)
对于基于SQL Server的程序包,您需要在Execute Package Task的PackagePath
属性上设置Expression。双击Execute Package Task,在Expressions选项卡上,将PackagePath属性映射到@[User::TgtPackage]
值(假设TgtPackage的值只是包名,例如so_26718490Target)
Biml是商业智能标记语言。如果您有免费的插件Bids Helper,则可以添加Biml文件并使用以下代码生成使用For Each Item Enumerator的包。在其中,执行包任务使用基于文件的源。
有关Biml配置程序包名称的示例,请参阅https://stackoverflow.com/a/21170368/181965
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<FileConnection Name="FCChild" FilePath="c:\Sandbox\SO\SO\so_26718490Target.dtsx"></FileConnection>
</Connections>
<Packages>
<Package ConstraintMode="Linear" Name="so_26718490Target"></Package>
<Package
ConstraintMode="Linear"
Name="so_26718490">
<Variables>
<Variable DataType="String" Name="TgtPackage">c:\Sandbox\SO\SO\so_26718490Target.dtsx</Variable>
</Variables>
<Tasks>
<ForEachItemLoop ConstraintMode="Linear" Name="FILC Run packages">
<Rows>
<Row>
<Columns>
<Column DataType="String" Value="c:\Sandbox\SO\SO\so_26718490Target.dtsx"></Column>
</Columns>
</Row>
</Rows>
<VariableMappings>
<VariableMapping VariableName="User.TgtPackage" Name="0"></VariableMapping>
</VariableMappings>
<Tasks>
<!--
Execute package task
-->
<ExecutePackage Name="EPT File Child">
<File ConnectionName="FCChild"></File>
</ExecutePackage>
</Tasks>
</ForEachItemLoop>
</Tasks>
<Connections>
<Connection ConnectionName="FCChild">
<Expressions>
<Expression ExternalProperty="ConnectionString">@[User::TgtPackage]</Expression>
</Expressions>
</Connection>
</Connections>
</Package>
</Packages>
</Biml>