我有一个SSIS包(SQL Server 2008)。我有一个Excel源文件(XLS 97-2003),我想首先导入一个SQL表,将所有内容存储为字符串(例如,数字和日期存储为rae编写的)。然后,我将此表中的数据提取到其他表中。
Excel源代码配置如下:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*********;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";
我的问题发生在第一步。让我解释 : 我的一些专栏可能包含大文字。我确切地知道那些列是什么。
问题在于:
我想配置我的软件包,以便在数据源包含的数据少于预期时不会出错。在我看来,这是相当合理的,但我无法实现......
非常感谢任何帮助。
答案 0 :(得分:1)
根据MSDN SSIS文档,您应该阅读以下两个内容:
缺少值。 Excel驱动程序在指定的源中读取一定数量的行(默认情况下为8行)以猜测数据类型 每列 ...有关详细信息,请参阅PRB:返回的Excel值 as NULL使用DAO OpenRecordset。
截断文本。当驱动程序确定Excel列包含文本数据时,驱动程序会选择数据类型(字符串或备忘录) 基于它采样的最长值。如果司机没有 发现任何超过255个字符的值 样本,它将列视为255个字符的字符串列 备忘录栏目。因此,长度超过255个字符的值可能是 截断。 要从备忘录列导入数据而不截断,您 必须确保备注栏中至少有一个采样 rows包含超过255个字符的值,或者您必须增加 驱动程序采样的行数,包括这样的行。您 可以通过增加值来增加采样的行数 TypeGuessRows下 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Excel注册表 键。有关更多信息,请参阅PRB:从Jet 4.0传输数据 OLEDB源因错误而失败。
因此,您似乎尝试动态更改excel源结构(不能与Excel提供程序一起使用),或者您可能拥有不符合上述要求的数据(即8行后没有长文本或长文本) )。我想你可以用两种可能的方法处理这个问题:
NTEXT
- 大小数据粘贴到这些列中。拯救很多神经。您可以在第一行执行此操作,因此Excel提供商在检查列内容后不会感到沮丧。PS。第三种方法是根本不使用Excel提供程序。将Excel文件另存为CSV并使用平面文件源,您将无法使用此问题遇到此问题。只有当您100%确定源文件满足所有要求且从不意外更改其结构时,Excel Source才有用。