1

在 2008 BIDS/SQL Server/SSIS 开发环境(连同 BIDS Helper v1.70)中,我正在尝试创建一个 biml 主包来执行已经在 Rootnode 下构建的子包。还使用配置文件能够在不同的服务器上运行整个过程。

配置文件

?xml version="1.0"?>
<DTSConfiguration>
   <DTSConfigurationHeading><DTSConfigurationFileInfo GeneratedBy="XXXXXX" GeneratedDate="7/28/2016 1:28:29 PM"/></DTSConfigurationHeading>
   <Configuration ConfiguredType="Property" Path="\Package.Connections[dw].Properties[ConnectionString]" ValueType="String">
      <ConfiguredValue>Data Source=imsqldv50s\euc;Initial Catalog=CDODW;Provider=SQLNCLI10.1;Integrated Security=SSPI;</ConfiguredValue>
    </Configuration>
    <Configuration ConfiguredType="Property" Path="\Package.Connections[PkgFile].Properties[ConnectionString]" ValueType="String">
      <ConfiguredValue>\\IMSQLDV50s\EUCPACKAGES\CDODW\Load CDODW Tables Biml\</ConfiguredValue>
    </Configuration>
    <Configuration ConfiguredType="Property" Path="\Package.Variables[User::ChildPackagePath].Properties[Value]" ValueType="String">
      <ConfiguredValue>\\IMSQLDV50s\EUCPACKAGES\CDODW\Load CDODW Tables Biml\</ConfiguredValue>
    </Configuration>
</DTSConfiguration>

子包的构建已经测试通过。现在我们正在尝试构建主包。

05-加载-edw-master.biml

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
  <Packages>
    <Package Name ="Master EDW Load" ConstraintMode ="Linear">
      <PackageConfigurations>
        <PackageConfiguration Name="dw">
          <ExternalFileInput ExternalFilePath="C:\SSISConfig\CDODW_ETL_Load.dtsConfig" />
          <ConfigurationValues>
            <ConfigurationValue DataType="String" Name="dw" PropertyPath="\Package.Connections[dw].Properties[ConnectionString]" Value=""></ConfigurationValue>
          </ConfigurationValues>
        </PackageConfiguration>
        <PackageConfiguration Name="PkgFile">
          <ExternalFileInput ExternalFilePath="C:\SSISConfig\CDODW_ETL_Load.dtsConfig" />
          <ConfigurationValues>
            <ConfigurationValue DataType="String" Name="PkgFile" PropertyPath="\Package.Connections[PkgFile].Properties[ConnectionString]" Value=""></ConfigurationValue>
          </ConfigurationValues>
        </PackageConfiguration>
      </PackageConfigurations>
      <#=CallBimlScript("cbs-pkg-params-variables.biml", "No Table", "master-load", "","","")#>
      <!--
      <Connections>
        <Connection ConnectionName="dw" />
        <Connection ConnectionName="PkgFile">
          <Expressions>
            <Expression PropertyName="PkgFile.ConnectionString">@[User::ChildPackagePath]</Expression>
          </Expressions>
        </Connection>
      </Connections>
      -->
      <Tasks>
        <#=CallBimlScript("cbs-sql-audit-begin.biml", "master-load")#>
          <Container Name="SEQ Load Dimensions" ConstraintMode="Linear">
          <Tasks>
            <# foreach (var package in RootNode.Packages.Where(pkg => pkg.GetTag("type")=="load-edw-dim").OrderBy(pkg => pkg.GetTag("LoadOrder"))) { #>
              <ExecutePackage Name="EP <#=package.Name#>" DelayValidation="true">
                <Package PackageName="<#=package.Name #>" />
              </ExecutePackage>       
            <# } #>
          </Tasks>
        </Container>
            <Container Name="SEQ Load Facts" ConstraintMode="Linear">
          <Tasks>    
            <# foreach (var package in RootNode.Packages.Where(pkg => pkg.GetTag("type")=="load-edw-fact").OrderBy(pkg => pkg.GetTag("LoadOrder"))) { #>   
              <ExecutePackage Name="EP <#=package.Name #>" DelayValidation="true">
                <Package PackageName="<#=package.Name #>" />
              </ExecutePackage>
            <# } #>
          </Tasks>
        </Container>
        <#=CallBimlScript("cbs-sql-audit-end.biml")#>
      </Tasks>
      <Annotations>
        <Annotation AnnotationType="Tag" Tag="type">master-load</Annotation>
      </Annotations>
    </Package>
  </Packages>
</Biml>
<#@ template language="C#" tier="5"#>

连接已在第 1 层文件中定义

生成包后,我注意到 Biml 引擎使用约定"_" + Master Package Name.SequenceContainerName.ExecutePackageName创建连接管理器,连接字符串指向本地文件路径。它是“在幕后”这样做的,因为扩展的 biml 文件中没有关于它是如何完成的线索!

是否有一种很好的简单方法可以从配置文件中插入传入的文件路径,该路径可以被识别并用于构建每个 FileConnection 的数据?我认为将相关文件位置存储在一个变量中(从配置文件提供)并以某种方式使用它从从 foreach 片段中获取的包名称开发 ConnectionString 是有意义的,但引擎似乎不喜欢那样.

任何帮助表示赞赏。

谢谢!

4

0 回答 0