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 回答
如果已选择“替换现有”列,则“派生列”组件无法更改数据类型 . 在以下示例中,我的列
TABLE
是一个unicode字符串,长度为255.在第一行中,我明确地将类型更改为非unicode字符串,并观察数据类型仍然是DT_WSTR 255.正确应用于新列的相同公式改变类型 . 如果我用列引用替换ABC的静态字符串,(DT_STR, 255, 1252) [TABLE]
我会看到相同的结果 - 更改数据类型 .虽然我没有2005实例进行测试,但我相信这个功能在第一次迭代时确实存在,但在2012年被删除 .
使用oledb目标中的动态规则将数据转换任务结束