批量插入 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 的一个不受支持的服务包级别。您应该先应用最新的服务包,然后再对这样的问题进行更多的故障排除:
可能的原因
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
- 这也可能是由于 损坏的索引 引起的。
可能的解决方案:尝试重建索引
可能的解决方法
如果错误与 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 等)来遍历文件并为您完成所有工作。几年前,在以前的工作中,我不得不这样做。
我有 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 的一个不受支持的服务包级别。您应该先应用最新的服务包,然后再对这样的问题进行更多的故障排除:
可能的原因
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
- 这也可能是由于 损坏的索引 引起的。
可能的解决方案:尝试重建索引
可能的解决方法
如果错误与 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 等)来遍历文件并为您完成所有工作。几年前,在以前的工作中,我不得不这样做。