2016-09-23 11 views
2

bimlによって生成されたマージ結合コンポーネントで、以下のエラーが表示されます。 SSISでマージ結合コンポーネントをダブルクリックすると、SSIS xmlコードでSortKeyPosition = "1"をOutputColumnセクションに追加したことがわかりました。私は後でパッケージを成功裏に実行することができました。 この特定のセクションOutputColumnに対してbimlのSortKeyPositionを設定する方法を教えてください。 以下、エラーと私のbimlコードです。 BIML、属性SortKeyPositionがコンポーネントマージ結合のOutputColumセクションの属性として設定されていません

[SSIS.Pipeline] Warning: The IsSorted property of MERGEJOIN_wcs_customer_order_line.Outputs[Output] is set to TRUE, but all of its output columns' SortKeyPositions are set to zero. [MERGEJOIN_wcs_customer_order_line [130]] Error: The column with the SortKeyPosition value of 0 is not valid. It should be 1. [MERGEJOIN_wcs_customer_order_line [130]] Error: The column with the SortKeyPosition value of 0 is not valid. It should be 2. [SSIS.Pipeline] Error: "MERGEJOIN_wcs_customer_order_line" failed validation and returned validation status "VS_NEEDSNEWMETADATA".



<MergeJoin Name="MERGEJOIN_<#=table.Name#>" JoinType="LeftOuterJoin"> 
    <LeftInputPath OutputPathName="SORT_<#=table.Name#>.Output"> 
     <Columns> 
      <# 
      indexSortKey=1; 
       foreach(var column in table.Columns) { 
       if (column.GetTag("ColumnRole")=="BK") 
       { 
       #> 
        <Column SourceColumn="DC_<#=column.Name#>" SortKeyPosition="<#=indexSortKey.ToString()#>" TargetColumn="STG_<#=column.Name#>" />    
       <# 
        indexSortKey++; 
       } 
       else 
       {#> 
        <Column SourceColumn="DC_<#=column.Name#>" TargetColumn="STG_<#=column.Name#>"/> 
       <#} 
      } #> 
     </Columns> 
    </LeftInputPath> 
    <RightInputPath OutputPathName="OLEDBD_ODS_<#=table.Name#>.Output"> 
     <Columns>           
      <# 
      indexSortKey=1; 
       foreach(var column in table.Columns) { 
       if (column.GetTag("ColumnRole")=="BK") 
       {#> 

       <Column SourceColumn="<#=column.Name#>" SortKeyPosition="<#=indexSortKey.ToString()#>" TargetColumn="ODS_<#=column.Name#>" />    
       <# 
        indexSortKey++; 
       } 
       else 
       {#> 
        <Column SourceColumn="<#=column.Name#>" TargetColumn="ODS_<#=column.Name#>"/> 
       <#} 
      } #> 
     </Columns> 
    </RightInputPath> 
    <JoinKeys> 
     <#foreach(var column in table.Columns.Where(i=> i.GetTag("ColumnRole")=="BK")) { #> 
      <JoinKey LeftColumn="<#=column.Name#>" RightColumn="<#=column.Name#>"></JoinKey> 
     <# } #> 
    </JoinKeys> 
</MergeJoin> 
+0

データソースの出力は、適切に 'SortKeyPosition'sで' IsSorted'とマークされていますか? – iamdave

+0

は、それらがSSIS GUIおよびcachedSortKeyPositionとしてSSISコードに正しく設定されているはい: Phuong

答えて

0

あなたがこのの底に得ることができたが、私は正確に同じ問題を持っていたし、問題が何であるかを働いているかどうかわかりません。

JoinKeysを指定するとき、LeftColumnとRightColumnの値は、上記の入力パスのセクションの列のエイリアスと一致する必要があります。あなたの場合、JoinKeysセクションは次のように定義する必要があります:

<JoinKeys> 
    <#foreach(var column in table.Columns.Where(i=> i.GetTag("ColumnRole")=="BK")) { #> 
     <JoinKey LeftColumn="STG_<#=column.Name#>" RightColumn="ODS_<#=column.Name#>"></JoinKey> 
    <# } #> 
</JoinKeys> 

Fiaz

+0

多くのおかげで、私はすでにそれを考え出したが、あなたの答えは完璧です! もう一度ありがとうございます。 – Phuong

関連する問題