当前位置:  开发笔记 > 开发工具 > 正文

SSIS Excel数据源 - 是否可以覆盖列数据类型?

如何解决《SSISExcel数据源-是否可以覆盖列数据类型?》经验,为你挑选了3个好方法。

在SSIS中使用Excel数据源时,每个列的数据类型都是从列中的数据派生的.是否可以覆盖此行为?

理想情况下,我们希望从excel源传递的每个列都是字符串数据类型,以便可以在数据流的后续步骤中对从源接收的数据执行数据验证.

目前,错误输出选项卡可用于忽略转换失败 - 有问题的数据为空,并且包将继续执行.但是,我们想知道原始数据是什么,以便可以为该行生成适当的错误消息.



1> Robert MacLe..:

是的你可以.只需进入Excel源代码的输出列列表,然后为每个列设置类型.

要进入输入列列表,请右键单击Excel源,选择"显示高级编辑器",然后单击标记为"输入和输出属性"的选项卡.

一个可能更好的解决方案是使用派生列组件,您可以在Excel中为每列实际构建"新"列.这有好处

    您可以更好地控制转换为的内容.

    你可以放入控制变化的规则(即如果null给我一个空字符串,但是如果有数据则给我一个字符串数据)

    您的数据源不直接与流程的其余部分绑定(即您可以更改源,并且您需要执行的唯一工作位于派生列中)


为什么这个问题被标记为已回答?上述评论明确指出这不起作用.
现在到达那里 - 我使用了高级编辑器并将输入和输出列更改为所有数据类型都为DT_WSTR.但是,错误输出列数据类型必须匹配输入列数据类型,并且似乎无法更改这些......感谢您的继续帮助!

2> Ryan Kohn..:

根据这篇博客文章,问题是SSIS Excel驱动程序根据读取前8行的值确定每列的数据类型:

如果前8个记录包含相同数量的数字和字符类型 - 则优先级为数字

如果大多数前8个记录都是数字,那么它将数据类型指定为数字,并且所有字符值都读为NULL

如果大多数前8个记录都是字符类型,那么它将数据类型指定为字符串,并将所有数值读取为NULL

这篇文章概述了你可以做的两件事来解决这个问题:

    首先,添加IMEX=1到Excel驱动程序连接字符串的末尾.这将允许Excel将值读取为Unicode.但是,如果前8行中的数据是数字,则这是不够的.

    在注册表中,将值更改为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Nod\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows0.这将确保驱动程序查看所有行以确定列的数据类型.



3> Dave Scotese..:

如果您的Excel文件在第一行数据中包含相关列中的数字,则SSIS引擎似乎会将类型重置为数字类型.它一直在重置我的.我进入了我的Excel文件,并通过在它们前面放置一个引号将数字更改为"存储为文本的数字".它们现在被视为文本.

我还注意到SSIS使用第一行来IGNORE程序员指示的是数据的实际类型(我甚至告诉Excel将整个列格式化为TEXT,但SSIS仍然使用数据,这是一堆数字) ,并重置它.一旦我通过在我的Excel文件中的第一行数据前面的单引号中修改它,我认为它会正确,但不,还有额外的工作.

实际上,即使SSIS外部数据源列现在具有DT_WSTR类型,它仍将读取43567192为4.35671E + 007.因此,您必须返回Excel文件并在所有数字前面加上单引号.

很漂亮,微软!但是有你的解决方案.如果Excel文件不在您的控制范围内,我不知道该怎么办.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有