我有一个包含四个文本列的excel文件: 其中一个名为ShortDescription,具有最长的值。 我在SQL Server 2008数据库中创建了一个表,其中包含四列,ShortDescription列类型设置为NvarChar(Max)。
但是当使用SSIS导入和导出对话框时,即使我将OnTruncation选项设置为Ignore,我也会在标题中收到上述错误。
我试图清除列数据,但它成功了(所以我确保问题出在ShortDescription列中)。 我试图将整个数据复制到另一本excel工作簿,但仍然没有运气。
任何想法???
答案 0 :(得分:66)
我假设你在SSIS对话框中尝试使用Excel Source导入它?
如果是这样,问题可能是SSIS在创建Excel源时在电子表格的开头采样了一些行。如果在[ShortDescription]列上它没有注意到任何太大的内容,它将默认为255个字符的文本列。
因此,要从包含大量数据的行而不截断的列导入数据,有两个选项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
下增加TypeGuessRows的值来增加采样的行数(如果您的系统是x64,那么在HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel
下)
注册表项。您可以在以下两个链接中查看更多信息:
为了进一步说明,SSIS在向导的幕后创建了3个对象,一个Excel数据源对象,一个SQL表目标对象,以及它们之间的数据流运算符。 Excel源对象定义源数据,并且独立于其他两个对象而存在。因此,当它被创建时,我描述的采样完成并且设置了源列大小。因此,当数据流操作符执行并尝试将数据从excel中提取到表中时,它已经在查看一个限制为255个字符的数据源。
答案 1 :(得分:32)
从平面分隔文件导入SQL Server时出现此问题。解决方案是更新违规列的“OutputColumnWidth”值(来自错误消息)。在导入向导中的“选择数据源”表单中,我的源是平面文件。在最左侧的窗格中,选择“高级”。然后,您可以设置各列的属性。在我的例子中,我的大多数列的'OutputColumnWidth'默认为'50'。我只是将其更新为更大的值,不会截断平面文件中的值。
答案 2 :(得分:8)
使其工作的一种简单方法是编辑要导入的文件,并在第一个位置创建一个新行。这样它将始终被采样。然后,对于可能包含> 255个字符的任何列,只需向单元格添加255个字符即可。导入后,只需删除您添加的垃圾行。
答案 3 :(得分: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。
这些设置没有错误。
答案 4 :(得分:1)
需要更改注册表组件的备用位置以解决此问题。
如果你在
找不到它开始 - > RUN-> RegEdit-> HKEY_LOCAL_MACHINE \ SOFTWARE \微软\喷气\ 4.0 \发动机\ Excel中
然后查看
开始 - > RUN-> RegEdit-> HKEY_LOCAL_MACHINE - >软件 - > Wow6432Node - >微软 - > Jet - > 4.0 - >引擎 - > Excel中
答案 5 :(得分:1)
对我而言,这个链接帮助了我:https://support.microsoft.com/en-us/kb/189897
答案 6 :(得分:0)
尝试一下- 转到数据流任务>右键单击Excel数据源>单击显示高级编辑器>选择输入和输出属性>展开Excel源输出>展开外部列和输出列,然后检查错误的列,然后单击那些列标题并更新数据相应地键入(多数情况下应为 Unicode文本流[DT_NTEXT] ,否则请尝试更改并尝试)。 希望有帮助。