SSIS 从 Excel 到 SQL 服务器:数据类型长度
SSIS from Excel to SQL Server : DataType length
我有一个 SSIS 包 (SQL Server 2008)。我有一个 Excel 源文件 (XLS 97-2003),我想首先将其导入到 SQL table 中,将所有内容存储为字符串(例如,数字和日期按 rae 写入的方式存储).然后,我从这个 table 中获取数据到我的其他 table 中。
Excel 源配置如下:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*********;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";
我的问题发生在第一步。让我解释 :
我的某些专栏 MIGHT 包含大文本。我确切地知道这些列是什么。
问题是:
- 一方面,如果源列配置为 ntext,并且如果有长文本(>255 个字符),则可以。如果这些列或短文本(<255 个字符)或什至前 8 行后的长文本没有数据,我会收到错误消息(Excel 源上的红框...不会更进一步).
- 另一方面,如果源列配置为 (wstr, 255) 并且没有数据或短数据 (<255 char),则一切正常。如果有大文本,我会得到一个错误(这似乎是合乎逻辑的)。
我想配置我的程序包,以便在数据源包含的数据少于预期时不会出错。我觉得挺有道理的,但是我做不到...
任何帮助将不胜感激。
根据 MSDN SSIS 文档,您应该阅读以下两个:
Missing values. The Excel driver reads a certain number of rows (by default, 8 rows) in the specified source to guess at the data type of
each column... For more information, see PRB: Excel Values Returned
as NULL Using DAO OpenRecordset.
Truncated text. When the driver determines that an Excel column contains text data, the driver selects the data type (string or memo)
based on the longest value that it samples. If the driver does not
discover any values longer than 255 characters in the rows that it
samples, it treats the column as a 255-character string column instead
of a memo column. Therefore, values longer than 255 characters may be
truncated. To import data from a memo column without truncation, you
must make sure that the memo column in at least one of the sampled
rows contains a value longer than 255 characters, or you must increase
the number of rows sampled by the driver to include such a row. You
can increase the number of rows sampled by increasing the value of
TypeGuessRows under the
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet.0\Engines\Excel registry
key. For more information, see PRB: Transfer of Data from Jet 4.0
OLEDB Source Fails w/ Error.
因此,您似乎要么尝试动态更改 excel 源结构(这不适用于 Excel 提供程序),要么您的数据可能不符合上面列出的要求(即没有长文本或 8 行后的长文本)。我想你可以使用两种可能的方法来处理这个问题:
- 将虚拟
NTEXT
大小的数据粘贴到这些列中。节省很多神经。您可以在第一行执行此操作,因此 Excel 提供者在检查完列内容后不会感到沮丧。
- 增加行采样设置,使用来自 MSDN 的 link。如果您在这些列中没有任何文本,无论如何都会失败。
PS。第三种方法是根本不使用 Excel 提供程序。将 Excel 文件另存为 CSV 并使用平面文件源,使用它时不会遇到此问题。 Excel 只有当您 100% 确定源文件满足所有要求并且 绝不会 意外更改其结构时,源才是好的。
我有一个 SSIS 包 (SQL Server 2008)。我有一个 Excel 源文件 (XLS 97-2003),我想首先将其导入到 SQL table 中,将所有内容存储为字符串(例如,数字和日期按 rae 写入的方式存储).然后,我从这个 table 中获取数据到我的其他 table 中。
Excel 源配置如下:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*********;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";
我的问题发生在第一步。让我解释 : 我的某些专栏 MIGHT 包含大文本。我确切地知道这些列是什么。
问题是:
- 一方面,如果源列配置为 ntext,并且如果有长文本(>255 个字符),则可以。如果这些列或短文本(<255 个字符)或什至前 8 行后的长文本没有数据,我会收到错误消息(Excel 源上的红框...不会更进一步).
- 另一方面,如果源列配置为 (wstr, 255) 并且没有数据或短数据 (<255 char),则一切正常。如果有大文本,我会得到一个错误(这似乎是合乎逻辑的)。
我想配置我的程序包,以便在数据源包含的数据少于预期时不会出错。我觉得挺有道理的,但是我做不到...
任何帮助将不胜感激。
根据 MSDN SSIS 文档,您应该阅读以下两个:
Missing values. The Excel driver reads a certain number of rows (by default, 8 rows) in the specified source to guess at the data type of each column... For more information, see PRB: Excel Values Returned as NULL Using DAO OpenRecordset.
Truncated text. When the driver determines that an Excel column contains text data, the driver selects the data type (string or memo) based on the longest value that it samples. If the driver does not discover any values longer than 255 characters in the rows that it samples, it treats the column as a 255-character string column instead of a memo column. Therefore, values longer than 255 characters may be truncated. To import data from a memo column without truncation, you must make sure that the memo column in at least one of the sampled rows contains a value longer than 255 characters, or you must increase the number of rows sampled by the driver to include such a row. You can increase the number of rows sampled by increasing the value of TypeGuessRows under the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet.0\Engines\Excel registry key. For more information, see PRB: Transfer of Data from Jet 4.0 OLEDB Source Fails w/ Error.
因此,您似乎要么尝试动态更改 excel 源结构(这不适用于 Excel 提供程序),要么您的数据可能不符合上面列出的要求(即没有长文本或 8 行后的长文本)。我想你可以使用两种可能的方法来处理这个问题:
- 将虚拟
NTEXT
大小的数据粘贴到这些列中。节省很多神经。您可以在第一行执行此操作,因此 Excel 提供者在检查完列内容后不会感到沮丧。 - 增加行采样设置,使用来自 MSDN 的 link。如果您在这些列中没有任何文本,无论如何都会失败。
PS。第三种方法是根本不使用 Excel 提供程序。将 Excel 文件另存为 CSV 并使用平面文件源,使用它时不会遇到此问题。 Excel 只有当您 100% 确定源文件满足所有要求并且 绝不会 意外更改其结构时,源才是好的。