BULK INSERT错误,原因不明

时间:2016-07-26 20:45:20

标签: sql sql-server tsql bulkinsert sql-server-2016

我正在尝试使用以下内容将一个相当宽的(220列)数据集插入到SQL Server 2016表中:

BULK INSERT dbo.[table] 
FROM 'C:\source.txt'
WITH
(
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '0x0A'
);

从一开始我就遇到了行终结器的几个问题,但是当我修复它时,一切似乎都工作得很好#OX0A'而不是' \ n'直到我尝试处理一个相当大的文件(相对于我正在加载的其他文件)。为了给你一个想法,它包含大约220列(目标是NVARCHAR(255),源几乎是INT)和10 000行。文件大小不超过40mb。

以下是我遇到的错误:

Msg 7399, Level 16, State 1, Line 6
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 6
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

更多信息:

  • 如果我使用FIRSTROW和LASTROW,我会得到同样的错误。

  • 尝试查找有问题的行时,一旦我开始删除行,文件就开始工作了(当我的集合中有大约1910行时开始工作)。

  • 我删除行的位置并不重要,如果我保留顶部1910行或底部1910行它可以工作,但只要我添加更多行(它们是有效的)它再次休息。

  • 我大约99%确定我的行结尾或其他格式问题没有任何问题。

  • 即使失败,错误文件仍然是空的。

我的直觉是它与内存管理有关,但据我所知,我的内存最大化,文件本身相当小,不应该给我内存问题。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您是否可以尝试在该文件上执行SAVE,并查看该文件的编码是否为ANSI之外的其他内容?我个人从来没有使用过标准'\ n'ROWTERMINATOR以外的任何东西。 '0x0A'听起来很奇怪。

修改:

尝试这些并查看其中任何一个是否成功:

  1. SELECT A. * FROM OPENROWSET(BULK'C:\ source.txt',SINGLE_CLOB)AS A

  2. 使用bcp导入并查看是否收到相同的错误

  3. 使用BATCH_SIZE,ROWS_PER_BATCH。请在尝试之前通过此链接,因为有影响。 https://technet.microsoft.com/en-us/library/ms188267(v=sql.105).aspx

  4. 尝试从导出/导入向导导入(右键单击数据库 - >任务 - >导入并通过屏幕)。看看这是否有效。

  5. 尝试使用OPENROWSET插入

    插入dbo.Table SELECT A. * FROM OPENROWSET(BULK'C:\ source.txt',FORMATFILE ='C:\ source.Xml'
          )作为A

    现在您需要使用此处的说明生成formatfile Source.xml - > https://msdn.microsoft.com/en-us/library/ms191516.aspx

    bcp是SQL Server附带的命令行工具。与从SSMS查询窗口运行的BULK Insert不同,这是一个外部工具。有关如何在上面的链接上使用它来生成格式文件(或其他方面)的大量帮助。古德勒克我稍后会回来查看。

答案 1 :(得分:0)

在Notepad ++中查看该文件。这应该会告诉你发生了什么。我确定这不是你的想法!!

相关问题