在SSIS中使用excel数据源时,每个单独列的数据类型都是从列中的数据派生出来的。是否有可能覆盖此行为?
理想情况下,我们希望从excel源传递的每一列都是字符串数据类型,以便可以在数据流的后续步骤中对从源接收的数据执行数据验证。
目前,Error Output选项卡可用于忽略转换失败-然后相关数据为null,包将继续执行。但是,我们希望知道原始数据是什么,以便为该行生成适当的错误消息。
发布于 2009-09-23 17:04:21
如果Excel文件的第一行数据的相关列中包含数字,则SSIS引擎似乎会将该类型重置为数字类型。它一直在重置我的。我进入Excel文件,通过在数字前面放置一个单引号,将数字更改为“存储为文本的数字”。它们现在被作为文本读取。
我还注意到,SSIS使用第一行忽略程序员所指出的数据的实际类型(我甚至告诉Excel将整个列的格式设置为文本,但SSIS仍然使用数据,它是一堆数字),并对其进行重置。一旦我修复了这个问题,我在Excel文件中第一行数据的数字前面放了一个单引号,我认为它会正确的,但是没有,还有额外的工作。
实际上,即使SSIS外部DataSource列现在的类型为DT_WSTR,它仍将读取43567192作为4.35671E+007。因此,您必须返回到Excel文件,并将单引号放在所有数字的前面。
相当差劲,微软!但这就是你的解决方案。如果Excel文件不在您的控制之下,我不知道该怎么办。
发布于 2017-08-19 01:34:36
我正在寻找类似问题的解决方案,但在互联网上没有找到任何东西。虽然大多数已找到的解决方案在设计时都可以工作,但当您想要自动化SSIS包时,它们就不起作用了。
我解决了这个问题,并通过更改"Excel Source“的属性使其正常工作。默认情况下,AccessMode
属性设置为OpenRowSet
。如果将其更改为SQL Command
,则可以编写自己的SQL来根据需要转换任何列。
对于我来说,SSIS将NDCCode
列视为浮点型,但我需要它作为字符串,因此我使用了以下SQL:
Select [Site], Cstr([NDCCode]) as NDCCode From [Sheet1$]
发布于 2014-06-26 10:24:03
我可以解决这个问题。在创建SSIS包时,我手动将特定的列更改为文本(打开excel文件,选择列,右键单击列,选择格式单元格,在数字选项卡中选择文本并保存excel)。现在创建SSIS包并对其进行测试。它起作用了。现在尝试使用未将此列设置为文本的excel文件。
它对我很有效,我可以成功地执行这个包。
https://stackoverflow.com/questions/540823
复制相似问题