从Excel导入数据时出现SQL错误

时间:2012-12-13 11:43:38

标签: sql-server-2008 excel

我从excel表导入数据。我正在努力解决以下问题 -

  
      
  • 执行(错误)消息错误0xc020901c:数据流任务1:输出“Excel”输出列“智能”(21)出错   源输出“(9)。返回的列状态为:”文本是   截断的或一个或多个字符在目标代码中不匹配   页面。“。(SQL Server导入和导出向导)

  •   
  • 错误0xc020902a:数据流任务1:“输出列”智能“(21)”失败,因为发生了截断,并且   截断行处理“输出列”智能“(21)”   指定截断失败。发生截断错误   指定组件的指定对象。 (SQL Server导入和   导出向导)

  •   
  • 错误0xc0047038:数据流任务1:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。组件“Source - MainSheetData $”(1)上的PrimeOutput方法返回错误代码0xC020902A。当管道引擎调用PrimeOutput()时,组件返回失败代码。   失败代码的含义由组件定义,但是   错误是致命的,管道停止执行。可能有错误   此前发布的消息包含有关失败的更多信息。   (SQL Server导入和导出向导)

  •   

10 个答案:

答案 0 :(得分:4)

我正用同样的错误将我的头撞在墙上。

尝试导入MS Access,然后导入SQL Server。

答案 1 :(得分:3)

原来它只检查Excel工作表的前8行左右。如果它确定长度为225,后来遇到超过225个字符时发生错误,我为解决问题所做的就是先做假行包含最糟糕的情况(最大的一切)和问题解决了!

答案 2 :(得分:1)

第一个错误告诉您,Intelligence列的源数据要比目标列长,要么包含目标列无法接受的字符。

第二个错误告诉您,Intelligence列比目标列长,因此失败。我希望这是真正的问题。

你可以

  • 展开目标列的大小以覆盖较大的输入 或
  • 在“截断”
  • 上将组件的错误输出切换为“忽略失败”

答案 3 :(得分:1)

我遇到了同样的问题,虽然我在这里搜索了很多建议但是对我有用的选项是将excel文件转换为CSV并使用bulk insert命令代替。

这绕过了编辑映射的需要,这对我来说并不适用。当我更改字段类型时,我有一个没有更新的字段。

以下this answer代码:

BULK INSERT TableName
        FROM 'C:\SomeDirectory\my table.txt'
            WITH
    (
                FIELDTERMINATOR = '\t',
                ROWTERMINATOR = '\n'
    )
GO

答案 4 :(得分:0)

使用CSV导入很困难,因为导入过程不知道任何字段的最大长度。因此,当它遇到比初始列长度更长的行时,它会出错。

只需将您的csv文件另存为Excel工作簿并重新导入即可。您需要删除上次故障前创建的现有表。

因为它很好,它可以在创建表时获得正确的字段长度。

答案 5 :(得分:0)

从Excel导入到SQL Server 2008时,我遇到了同样的错误。我可以通过从xlsx导出到csv然后将csv文件导入Sql Server来实现。是的,我不得不手动调整列长度,但它工作得很好!

答案 6 :(得分:0)

我遇到了同样的问题,不得不手动通过Excel来查找问题。一次性保护,如果您点击报告 - >在底部查看报告,它将打开一个新窗口。如果您一直滚动到报表的底部,它将告诉您处理了多少行。它并不一定意味着问题出现在下一行,但至少你可以在此之前跳过所有行。

我接下来在Excel中所做的只是采用适合SQL的字符数量(即LEFT([Column],255)并截断其余部分。

这不太理想,但它在我的案例中有用。

答案 7 :(得分:0)

Export

您需要更改" On Error"忽略的选项和" On Truncation" “查看数据类型映射”中忽略的选项。 这将解决问题。

答案 8 :(得分:0)

我不确定,如果有人试过这个:

从excel .xls或其当前的任何excel格式复制文件的内容,并将其作为值粘贴到新的Excel文件中。以.xlsx格式保存文件,然后尝试再次使用sql server导入。

这将是一次成功!!

答案 9 :(得分:-1)

将最大长度放在第一行就足够了。然后它起作用。