在Execute Package Task中动态设置PackageName

时间:2014-11-03 16:25:34

标签: ssis sql-server-2008-r2

如何在执行包任务中动态设置PackageName?

我已经将包列表选择到用户变量中,并获得一个ForEach循环,其中包含一个脚本任务,显示我在那里的值... Dts.Variables["User::TgtPackage"].Value.ToString()

但我尝试过使用......

  • 用户:: TgtPackage
  • Dts.Variables [ “用户:: TgtPackage”]。Value.ToString()
在PackageName中

,但都不起作用

1 个答案:

答案 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)

enter image description here

BIML

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>