首页 文章

BIML SsisDataTypeOverride不起作用

提问于
浏览
1

ssis中的数据转换任务不允许重用现有列以便轻松自动映射到目标 .

所以我编写了一个foreach列并评估了数据类型,将其动态添加到列集合中 .

我注意到DataType和Length是必需的,但它们对ReplaceExisting = true没有影响 .

有没有人找到一种方法来强制使用biml在派生任务中转换新数据类型?

这不起作用 .

在生成SSIS包时,使用(DT_WSTR,length)生成列会出现,但不会更改派生任务中为该列定义的数据类型 .

<DerivedColumns Name="der_conversions">
<Columns>
    <# 
    foreach(var column in table.Columns)
    {
        if(column.DataType == System.Data.DbType.AnsiString)
        {
    #> 
    <!-- the DataType and Length are required however they have no effect for ReplaceExisting=true -->
    <Column  ReplaceExisting="true" Name="<#=column.Name#>" DataType="String" SsisDataTypeOverride="DT_WSTR" Length="<#=column.Length#>"><#=column.Name#></Column>  
    <#  
        }//endif 
    }//endforeach
    #>
</Columns>

2 回答

  • 1

    如果已选择“替换现有”列,则“派生列”组件无法更改数据类型 . 在以下示例中,我的列 TABLE 是一个unicode字符串,长度为255.在第一行中,我明确地将类型更改为非unicode字符串,并观察数据类型仍然是DT_WSTR 255.正确应用于新列的相同公式改变类型 . 如果我用列引用替换ABC的静态字符串, (DT_STR, 255, 1252) [TABLE] 我会看到相同的结果 - 更改数据类型 .

    Derived Column Type Change

    虽然我没有2005实例进行测试,但我相信这个功能在第一次迭代时确实存在,但在2012年被删除 .

  • 2

    使用oledb目标中的动态规则将数据转换任务结束

    <OleDbDestination Name="oledb_dst_<#=table.Name#>" ConnectionName="cmgr_zaprisque_dvar"  KeepIdentity="true">
                                    <ExternalTableOutput Table="<#=table.Schema.Name#>.<#=table.Name#>" />
                                    <Columns>
                                    <# 
                                        foreach(var column in table.Columns)
                                        {
                                            if(column.DataType == System.Data.DbType.AnsiString)
                                            {
                                        #> 
                                        <!-- the DataType and Length are required however they have no effect for ReplaceExisting=true -->
                                        <Column SourceColumn="<#=column.Name#>_conv" TargetColumn="<#=column.Name#>"/> 
                                        <#  
                                            }//endif 
                                            else
                                            {#> 
                                              <Column SourceColumn="<#=column.Name#>" TargetColumn="<#=column.Name#>"/> 
                                            <# }
    
                                        }//endforeach
                                        #>
                                    </Columns>
    
                                    </OleDbDestination>
    

相关问题