从Excel到SQL Server的SSIS:DataType长度

时间:2015-02-23 17:04:13

标签: ssis import-from-excel

我有一个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";

我的问题发生在第一步。让我解释 : 我的一些专栏可能包含大文字。我确切地知道那些列是什么。

问题在于:

  • 一方面,如果源列配置为ntext,并且如果有长文本(> 255 char),则确定。如果没有数据是这些列,或短文本(&lt; 255 char),甚至是前8行之后的长文本,我都会收到错误(Excel上的红框...不会更进一步< /强>)。
  • 另一方面,如果源列配置为(wstr,255),如果没有数据或短数据(&lt; 255 char),一切都很好。如果有大文本,我会收到错误(这似乎是合乎逻辑的)。

我想配置我的软件包,以便在数据源包含的数据少于预期时不会出错。在我看来,这是相当合理的,但我无法实现......

非常感谢任何帮助。

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行后没有长文本或长文本) )。我想你可以用两种可能的方法处理这个问题:

  1. 将虚拟NTEXT - 大小数据粘贴到这些列中。拯救很多神经。您可以在第一行执行此操作,因此Excel提供商在检查列内容后不会感到沮丧。
  2. 使用MSDN中的链接增加行采样设置。如果你在这些专栏中没有任何文字,那么无论如何都会失败。
  3. PS。第三种方法是根本不使用Excel提供程序。将Excel文件另存为CSV并使用平面文件源,您将无法使用此问题遇到此问题。只有当您100%确定源文件满足所有要求且从不意外更改其结构时,Excel Source才有用。