BULK INSERT 错误,原因不明

BULK INSERT error with unknown cause

我正在尝试使用以下方法将一个相当宽(220 列)的数据集批量插入到 SQL Server 2016 table 中:

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

从一开始我就遇到了一些行终止符的问题,但是当我将它修复为 'OX0A' 而不是 '\n' 时一切似乎都运行良好,直到我尝试处理一个相当大的文件(相对于我正在加载的其他文件)。为了给您一个概念,它包含大约 220 列(目标是 NVARCHAR(255),源几乎是 INT)和 10000 行。文件文件大小不超过 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)".

更多信息:

我的直觉是它与内存管理有关,但据我所知,我的内存已用完并且文件本身相当小,不应该给我带来内存问题。

有什么建议吗?

您能否尝试对该文件执行另存为操作,看看该文件的编码是否不是 ANSI?就我个人而言,除了标准的 '\n' ROWTERMINATOR 之外,我从来没有使用过任何东西。 “0x0A”听起来很奇怪。

编辑:

尝试这些,看看是否有任何一个成功:

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

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

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

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

尝试使用 OPENROWSET 插入

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

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

bcp 是 SQL 服务器附带的命令行工具。与从 SSMS 查询 window 运行的 BULK Insert 不同,这是一个外部工具。在上面的 link 上有很多关于如何使用它来生成格式文件(或其他方式)的帮助。祝你好运,我稍后再回来查看。

在 Notepad++ 中查看文件。那应该告诉你发生了什么。我敢肯定这不是你想的那样!!