【问题标题】:Using Import wizard to import Excel data into table in SQL Server 2012 failing - text truncation使用导入向导将 Excel 数据导入 SQL Server 2012 中的表失败 - 文本截断
【发布时间】:2017-08-23 16:09:44
【问题描述】:

我有一个 Excel 文件,我每周将其导入表格中。

我正在使用 Excel 2010 和 SSMS 2012。本周导入失败,我无法确定原因。我能够成功地将数据导入到新表中。新表的表定义与我的旧表匹配,所以这似乎不是问题。下面是我收到的错误的屏幕截图。我检查了 PO 标题文本字段,没有任何内容超过我拥有的 varchar(255) 的数据类型。

此外,我对数据进行了排序,只是为了查看是否是某个行导致了问题,并且确实插入了更多数据,但我仍然收到错误,并且它与原始导入尝试不在同一行。我什至再次删除并创建了原始表,但仍然收到错误消息。

【问题讨论】:

  • 你是如何检查列的长度的?如果不截断,它可能是它给你的另一个选择,你有一些奇怪的字符吗?是否可以尝试将目标表中的列更改为NVARCHAR(MAX)
  • 如果是这种情况,为什么新表在使用导入向导时会给出列 varchar(255)?我还在 Excel 中对该列进行了 len(),但没有收到任何超过 100 个字符的内容。
  • @tsqln00b 在 Excel 文件中按文本列降序对行进行简单测试,保存并运行。如果它有效,则意味着在您的前 8 条记录中只有短文本并且类型识别失败。
  • 那行得通。我以前从来没有这样做过,但从现在开始我会这样做。我讨厌 Excel!
  • @tsqln00b 我曾经遇到过完全相同的情况,从那时起我知道:)

标签: sql-server sql-server-2012 excel-2010 sql-import-wizard


【解决方案1】:

问题可能在于Import/Export WizardSSIS 如何获取有关数据类型的元数据。

它使用前几行。如果存在长字符串(大于 255),则数据类型为 memo,否则为字符串。

一种解决方法是根据文本列的长度降序对 Excel 行进行排序。

来自Excel Source

截断的文本。

当驱动程序确定 Excel 列包含文本数据时,驱动程序会根据其采样的最长值选择数据类型(字符串或备忘录)。如果驱动程序在其采样的行中没有发现任何超过 255 个字符的值,它会将列视为 255 个字符的字符串列而不是备注列。

因此,超过 255 个字符的值可能会被截断 要从备注列导入数据而不截断,您必须确保至少有一个采样行中的备注列包含超过 255 个字符的值,或者您必须增加驱动程序采样的行数以包含这样的行。

您可以通过增加 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel 注册表项下的 TypeGuessRows 的值来增加采样的行数。有关详细信息,请参阅 PRB:从 Jet 4.0 OLEDB 源传输数据失败并出现错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多