BIML SsisDataTypeOverride 不工作
BIML SsisDataTypeOverride not working
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>
结束了在 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>
如果您选择了替换现有列,则派生列组件无法更改数据类型。在下面的示例中,我的列 TABLE
是一个 unicode 字符串,长度为 255。在第一行中,我明确地将类型更改为非 unicode 字符串,并观察到数据类型仍然是 DT_WSTR 255。应用于新列的相同公式会正确更改类型。如果我用列引用替换 ABC 的静态字符串,(DT_STR, 255, 1252) [TABLE]
我会看到相同的结果 - 更改了数据类型。
虽然我没有要测试的 2005 实例,但我相信这个功能在第一次迭代中确实存在,但在 2012 年被删除了。
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>
结束了在 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>
如果您选择了替换现有列,则派生列组件无法更改数据类型。在下面的示例中,我的列 TABLE
是一个 unicode 字符串,长度为 255。在第一行中,我明确地将类型更改为非 unicode 字符串,并观察到数据类型仍然是 DT_WSTR 255。应用于新列的相同公式会正确更改类型。如果我用列引用替换 ABC 的静态字符串,(DT_STR, 255, 1252) [TABLE]
我会看到相同的结果 - 更改了数据类型。
虽然我没有要测试的 2005 实例,但我相信这个功能在第一次迭代中确实存在,但在 2012 年被删除了。