首页 文章

BIML,属性SortKeyPosition未设置为组件Merge Join的OutputColum部分中的属性

提问于
浏览
2

在由biml生成的Merge Join组件上,我收到以下错误 . 当双击SSIS中的合并连接组件时,我在SSIS xml代码中发现它在OutputColumn部分中添加了SortKeyPosition =“1” . 我之后能够成功执行包 . 如何在此特定部分OutputColumn中为biml设置SortKeyPosition . 下面是错误和我的biml代码 .


[SSIS.Pipeline]警告:MERGEJOIN_wcs_customer_order_line.Outputs [Output]的IsSorted属性设置为TRUE,但其所有输出列的SortKeyPositions都设置为零 . [MERGEJOIN_wcs_customer_order_line [130]]错误:SortKeyPosition值为0的列无效 . 它应该是1. [MERGEJOIN_wcs_customer_order_line [130]]错误:SortKeyPosition值为0的列无效 . 它应为2. [SSIS.Pipeline]错误:“MERGEJOIN_wcs_customer_order_line”验证失败并返回验证状态“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>

1 回答

  • 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

相关问题