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

问题描述 投票:2回答:9

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

  • 执行(错误)消息错误0xc020901c:数据流任务1:输出“Excel源输出”(9)上的输出列“智能”(21)出错。返回的列状态为:“文本被截断,或者目标代码页中的一个或多个字符不匹配。”。 (SQL Server导入和导出向导)
  • 错误0xc020902a:数据流任务1:“输出列”智能“(21)”失败,因为发生了截断,并且“输出列”智能“(21)”上的截断行处置指定了截断失败。指定组件的指定对象上发生截断错误。 (SQL Server导入和导出向导)
  • 错误0xc0047038:数据流任务1:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。组件“Source - MainSheetData $”(1)上的PrimeOutput方法返回错误代码0xC020902A。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。 (SQL Server导入和导出向导)
sql-server-2008 excel
9个回答
4
投票

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

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


3
投票

事实证明它只检查Excel工作表的前8行左右。如果它确定长度是225并且稍后遇到超过225个字符时发生错误,我做的解决问题的方法是制作第一个包含最糟糕的情况(最大的一切)和问题解决了!


1
投票

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

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

你也可以

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

1
投票

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

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

以下代码来自this answer

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

0
投票

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

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

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


0
投票

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


0
投票

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

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

这不是理想的,但它在我的情况下起作用。


0
投票

Export

您需要将“On Error”选项更改为Ignore,并将“On Truncation”选项更改为Review in Review Data Type Mapping。这将解决问题。


0
投票

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

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

这将是一次成功!!

© www.soinside.com 2019 - 2024. All rights reserved.