66

我有一个包含四个文本列的 excel 文件:其中一个称为 ShortDescription,它的值最长。我在 SQL Server 2008 数据库中创建了一个表,有四列,ShortDescription 列类型设置为 NvarChar(Max)。

但是在使用 SSIS 导入和导出对话框时,我不断收到标题中提到的错误,即使我将 OnTruncation 选项设置为 Ignore。

我试图清除列数据,它成功了(所以我确保问题出在 ShortDescription 列中)。我试图将整个数据复制到另一个 Excel 工作簿,但仍然没有运气。

有任何想法吗 ???

4

7 回答 7

71

我假设您正在尝试使用 SSIS 对话框中的 Excel 源导入它?

如果是这样,问题可能是 SSIS 在创建 Excel 源时在电子表格的开头采样了一些行。如果在 [ShortDescription] 列上没有发现太大的内容,它将默认为 255 个字符的文本列。

因此,要从包含大量数据且不截断的行的列中导入数据,有两种选择:

  1. 您必须确保至少有一个采样行中的 [ShortDescription] 列包含超过 255 个字符的值。一种方法是使用 REPT() 函数,例如 =REPT('z', 4000),它将创建一个包含 4000 个字母 'z' 的字符串。
  2. 您必须增加 Jet Excel 驱动程序采样的行数才能包含这样的行。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel您可以通过增加(如果您的系统是 x64 则在HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel)注册表项下的 TypeGuessRows 的值来增加采样的行数。

您可以在以下两个链接中查看更多信息:

为了进一步解释,SSIS 在向导的幕后创建了 3 个对象,一个 Excel 数据源对象,一个 SQL 表目标对象,以及它们之间的数据流运算符。Excel 源对象定义源数据并且独立于其他两个对象而存在。所以当它被创建时,我描述的采样就完成了,源列的大小也设置好了。因此,当数据流运算符执行并尝试从 excel 中提取数据以放入表中时,它已经在查看限制为 255 个字符的数据源。

于 2011-12-25T09:49:55.073 回答
35

从平面分隔文件导入 SQL Server 时,我遇到了这个问题。解决方案是更新违规列的“OutputColumnWidth”值(来自错误消息)。在导入向导的“选择数据源”表单上,我的源是平面文件。在最左侧的窗格中,选择“高级”。然后,您可以设置各个列的属性。就我而言,我的大多数列的“OutputColumnWidth”默认为“50”。我只是将它更新为一个更大的值,不会截断平面文件中的值。

在此处输入图像描述

于 2014-04-21T13:33:52.923 回答
9

让它工作的一个简单方法是编辑要导入的文件并在第一个位置创建一个新行。这样,它将始终被采样。然后对于任何可能有 >255 个字符的列,只需在单元格中添加 255 个字符即可。导入后,只需删除您添加的垃圾行。

于 2014-06-10T15:46:46.163 回答
6

当我尝试导入包含一些中文字符以及一些无效(大)字符串的大文件时出现此错误。

文本文件以 UTF8 格式保存。

我的设置:

在常规选项上(没有改变任何东西):

- Locale: English (United States) 
- Unicode: Unchecked
- Code Page: 65001 (UTF-8)

左侧有一个高级选项

- DataType (for column): Unicode String [DT_WSTR] (changed)
- OutputColumnWidth: 4000 (that's the maximum) (changed)

回顾数据类型映射

- On Error: Ignore
- On Truncation: Ignore

我的目标列的宽度 = 50。

这些设置没有错误。

于 2014-05-15T15:19:13.020 回答
1

注册表组件的另一个位置需要更改才能解决此问题。

如果您无法在

开始–>运行–>RegEdit–>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

然后进去看看

开始–>运行–>RegEdit–>HKEY_LOCAL_MACHINE -> SOFTWARE -> Wow6432Node -> Microsoft -> Jet -> 4.0 ->Engines -> Excel

于 2014-12-23T22:05:02.667 回答
1

对我来说,这个链接帮助了我: https: //support.microsoft.com/en-us/kb/189897

  1. 将单元格值> 255个字符的行复制到excel的开头,使该行成为excel中的第一行
  2. 从上面的链接更改注册表值。
于 2016-03-30T05:04:40.363 回答
0

试试这个 - 转到数据流任务 > 右键单击​​ Excel 数据源 > 单击显示高级编辑器 > 选择输入和输出属性 > 展开 Excel 源输出 > 展开外部列和输出列并检查错误列并单击那些列标题并相应地更新数据类型(大多数情况下应该是Unicode 文本流 [DT_NTEXT],否则更改为并试一试)。希望这有帮助。

于 2020-05-03T18:38:41.007 回答