大容量插入在 SQL Server 2008 中不起作用



这是我将CSV文件批量加载到SQL Server 2008中的SQL,但它返回:

0 row(s) affected.

法典:

USE energyDB
GO
BULK INSERT energydata
FROM 'c:temp24544_MSSQL_out.csv'
WITH
(
  FIRSTROW = 2,
  FIELDTERMINATOR = ',',
  ROWTERMINATOR = 'n'
)
GO

CSV 文件如下所示(忽略顶行)

24544,"1970-01-01 10:00:00","8056060 kWh"
24544,"2012-12-04 00:15:00",0.176
24544,"2012-12-04 00:30:00",0.163
24544,"2012-12-04 00:45:00",0.016

批量插入不会从数据中删除引号,您需要更改要导入的文件或导入到表中,其中每列都是一个字符字段,并在查询中去除引号并转换数据类型。我刚刚找到了以下 MSDN 文章:

http://msdn.microsoft.com/en-us/library/ms188609.aspx

它指出:

SQL Server 大容量导入操作不支持逗号分隔值 (CSV) 文件。

然后继续举几个它将在哪些情况下工作的例子。

这个问题有点旧,但是当我搜索问题时它出现了,所以我想我会提供我的解决方案。

就我而言,这是一个简单的错误,没有插入到正确的表中,因此请务必检查要插入的表。在试图弄清楚发生了什么时,我发现您可以让批量插入过程创建一个错误文件,希望该文件能指导您朝着正确的方向前进。为此,您可以使用类似 ERRORFILE ='E:Error.txt' .这应该将您收到的错误输出到名为 Error.txt 的文件中。我在下面提供了一个完整的示例:

BEGIN TRANSACTION
BEGIN TRY
BULK INSERT [Table Name]
FROM 'E:FileName.csv'
WITH (FIELDTERMINATOR = ',', ROWTERMINATOR = 'n', ERRORFILE ='E:Error.txt')
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH

您会注意到我已将批量插入过程包装在事务中。这样,如果在批量插入过程中出现任何问题,它将回滚所有内容,并且我不会获得部分数据导入。

最新更新