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]
我将看到相同的结果-更改了数据类型。
尽管我没有要测试的2005实例,但我相信此功能在第一次迭代时就存在,但在2012年已删除。
关于c# - BIML SsisDataTypeOverride无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47801824/