批量插入 csv 麻烦

Bulk Insert csv trouble

我有 SQL Server 2014 (v12.0.2000)。在该服务器上,我以这种方式对 1 kB 到 35 MB 范围内的大约 200 个文件执行 BULK INSERT

BULK INSERT [MYDB].[dbo].[my_table]
FROM 'C:\Docs\csv[=10=]1.csv'
WITH 
    (FIRSTROW = 1,
     FIELDTERMINATOR = ',',
     ROWTERMINATOR = '\n',
     DATAFILETYPE = 'char',
     TABLOCK,
     KEEPNULLS);

我的所有 .csv 文件在语法上都是正确的。这样一切都可以工作 2 天。

之后我突然得到这个错误:

Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. The results, if any, should be discarded.

甚至以前插入的文件现在也被丢弃了。当我尝试手动插入一行文件时,它也会引发错误。

P.S。我的硬盘上有足够的磁盘space。

Msg 0, Level 11, State 0, Line 0. A severe error occurred on the current command. The results, if any, should be discarded.

在 SQL 日志中查看更多详细信息。

12.0.2000.

您 运行 是 SQL 2014 的一个不受支持的服务包级别。您应该先应用最新的服务包,然后再对这样的问题进行更多的故障排除:

可能的原因

  1. 根据这篇微软文章:FIX: An error message may occur when you run a "BULK INSERT" query on a database that uses the "BULK_LOGGED" or "SIMPLE" recovery model in SQL Server:

This issue occurs because of an error in SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, or SQL Server 2014.

建议的解决方案是安装 Cumulative Update 1 for SQL Server 2014

  1. 这也可能是由于 损坏的索引 引起的。

可能的解决方案:尝试重建索引


可能的解决方法

如果错误与 BULK INSERT 方法有关

(1) 使用 Microsoft 文本驱动程序

SELECT * FROM OPENROWSET('MSDASQL',
'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=C:\Docs\csv\;',
'SELECT * FROM 001.csv')

(2) 使用 OLEDB 提供程序

SELECT 
    * 
FROM 
OPENROWSET
        (
            'Microsoft.ACE.OLEDB.12.0','Text;Database=C:\Docs\csv\;IMEX=1;','SELECT * 
FROM 001.csv'
        ) t

参考资料

您可能有换行符“\r\n”。因此,要在 .txt 文件中定义一个新行,使用 \r\n 符号。如果您在文本编辑器中打开它,您将看不到它们。你必须打开隐形字符模式。你可以用notepad++查看。

然后您将信息保存在.csv 文件中。但是 .csv 对于 \r\n 符号没有特殊含义。结果,它们按原样显示。

您必须直接删除代码中的 \r\n 个符号。或者,创建一个应用程序(使用 C#、VB.NET 等)来遍历文件并为您完成所有工作。几年前,在以前的工作中,我不得不这样做。

https://en.wikipedia.org/wiki/Newline