文本被截断,或者当从Excel文件导入时,一个或多个字符在目标代码页中没有匹配。

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)

我有一个EXCEL文件,其中有四个文本列:其中一个名为Short Description,它的值最长。我在SQLServer 2008数据库中创建了一个表,其中有四列,而且将ShtDescription列类型设置为NvarChar(MAX)。

但是,在使用SSIS导入和导出对话框时,即使我将OnTrunation选项设置为忽略,我仍然会在标题中得到提到的错误。

我试图清除列数据,结果成功了。我试着把全部数据复制到另一本Excel工作簿上,但仍然没有运气。

有什么想法吗?

提问于
用户回答回答于

我假设正在尝试使用SSIS对话框中的ExcelSource导入此文件?

如果是这样的话,问题可能是SSIS在创建Excel源代码时在电子表格的开头取样了一些行。如果在最短描述列--它不会注意到任何太大的东西,它将默认为255个字符的文本列。

因此,要从包含具有大量数据而不截断的列中导入数据,有两个选项:

  1. 必须确保最短描述至少一个抽样行中的列包含大于255个字符的值。一种方法是使用rept()函数,例如=rept(‘z’,4000),它将创建一个字母‘z’的字符串4000。
  2. 必须增加JetExcel驱动程序所采样的行数,才能包含这样的行。通过增加TypeGuessRow的值,可以增加采样的行数。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel(如果系统为x64,则在HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excel)注册表项。

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

用户回答回答于

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

扫码关注云+社区