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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

在SSIS中使用Excel数据源时,每个列的数据类型都是从列中的数据派生出来的。是否有可能推翻这种行为?

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

当前,Error Output选项卡可以用来忽略转换失败--相关数据随后为NULL,并且包将继续执行。但是,我们希望知道原始数据是什么,以便为该行生成适当的错误消息。

提问于
用户回答回答于

可以。只需进入Excel源上的输出列列表,并设置每个列的类型。

要进入“输入列”列表,右键单击Excel源,选择“显示高级编辑器”,单击标签为“输入和输出属性”的选项卡。

一个可能更好的解决方案是使用派生列组件,在该组件中,您可以为Excel中的每个列实际构建“新”列。这样做的好处是

  1. 可以更好地控制您转换到的内容。
  2. 可以放入控制更改的规则(如果NULL给我一个空字符串,但是如果有数据,则将数据作为字符串提供)
  3. 数据源不直接绑定到流程的其余部分(即可以更改源,需要做的唯一工作是在派生列中)。
用户回答回答于

SSIS Excel驱动程序根据读取前8行的值确定每列的数据类型:

  • 如果前8条记录包含相同数量的数字和字符类型,则优先级为数字。
  • 如果前8条记录大多数是数字的,那么它将数据类型指定为数字,并且所有字符值都被读取为NULL。
  • 如果前8条记录中的大多数为字符类型,则将数据类型指定为String,并且将所有数值读入NULL。

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

  1. 首先,添加IMEX=1到Excel驱动程序连接字符串的末尾。这将允许Excel将值读入Unicode。但是,如果前8行中的数据是数字的,则这是不够的。
  2. 在注册表中,更改HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Nod\Microsoft\Jet\4.0\Engines\Excel\TypeGuessRows到0。这将确保驱动程序查看所有行以确定列的数据类型。

扫码关注云+社区