首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BIML SsisDataTypeOverride不工作

BIML SsisDataTypeOverride不工作
EN

Stack Overflow用户
提问于 2017-12-14 04:44:57
回答 2查看 524关注 0票数 1

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

因此,我编写了一个foreach列并计算了数据类型,将其动态添加到columns集合中。

我注意到DataType和长度是必需的,但是它们对ReplaceExisting=true没有影响。

有没有人找到了一种方法,在使用biml的派生任务中强制使用新的数据类型进行转换?

这不起作用。

在生成DT_WSTR包时使用( SSIS,length)转换列,但不会更改在派生任务中为该列定义的数据类型。

代码语言:javascript
复制
<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>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-14 05:04:55

最终在oledb目标中使用具有动态规则的数据转换任务

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2017-12-14 06:56:49

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

虽然我没有2005年的实例来测试,但我相信这个功能在第一次迭代时确实存在,但到了2012年就被删除了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47801824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档