ssis中的数据转换任务不允许重复使用现有列,以便于自动映射到目标。

因此,我编写了一个foreach列并评估了数据类型,然后将其动态添加到column集合中。

我注意到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>

最佳答案

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

c# - BIML SsisDataTypeOverride无法正常工作-LMLPHP

尽管我没有要测试的2005实例,但我相信此功能在第一次迭代时就存在,但在2012年已删除。

关于c# - BIML SsisDataTypeOverride无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47801824/

10-10 13:47