ssis中的数据转换任务不允许重用现有列以方便地自动映射到目标。
因此,我编写了一个foreach列并计算了数据类型,将其动态添加到columns集合中。
我注意到DataType和长度是必需的,但是它们对ReplaceExisting=true没有影响。
有没有人找到了一种方法,在使用biml的派生任务中强制使用新的数据类型进行转换?
这不起作用。
在生成DT_WSTR包时使用( SSIS,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>
发布于 2017-12-14 05:04:55
最终在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>发布于 2017-12-14 06:56:49
如果选择了“替换现有列”,则派生列组件无法更改数据类型。在下面的示例中,我的列TABLE是一个长度为255的unicode字符串。在第一行中,我显式地将类型更改为非unicode字符串,并观察到数据类型仍然是DT_WSTR 255。应用于新列的相同公式可正确更改类型。如果我将ABC的静态字符串替换为列引用,(DT_STR, 255, 1252) [TABLE]我将看到相同的结果-更改后的数据类型。

虽然我没有2005年的实例来测试,但我相信这个功能在第一次迭代时确实存在,但到了2012年就被删除了。
https://stackoverflow.com/questions/47801824
复制相似问题