批量插入csv麻烦

时间:2018-01-22 16:28:26

标签: sql sql-server csv tsql bulkinsert

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

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

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

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

  

消息0,级别11,状态0,行0   当前命令发生严重错误。结果(如果有的话)应该被丢弃。

即使先前插入的文件也会被丢弃。当我尝试手动插入一行文件时,也会引发错误。

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

3 个答案:

答案 0 :(得分:4)

可能的原因

  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
  2.   

    出现此问题是由于SQL Server 2008,SQL Server 2008 R2,SQL Server 2012或SQL Server 2014中的错误。

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

    1. 这也可能是由于损坏的索引造成的。
    2. 可能的解决方案:尝试重建索引

      可能的解决方法

      如果错误与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
      

      参考

答案 1 :(得分:2)

  

消息0,级别11,状态0,行0.当前命令发生严重错误。结果(如果有的话)应该被丢弃。

查看SQL日志以获取更多详细信息。

  

12.0.2000。

您正在为SQL 2014运行不受支持的Service Pack级别。在对此类问题进行更多故障排除之前,您应该应用最新的Service Pack:

答案 2 :(得分:0)

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

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

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

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