1

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

0 row(s) affected.

代码:

USE energyDB
GO

BULK INSERT energydata
FROM 'c:\temp\24544_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
4

2 回答 2

0

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

就我而言,没有插入正确的表格是一个简单的错误,因此请务必检查您要插入的表格。在试图弄清楚发生了什么时,我发现您可以让批量插入过程创建一个错误文件,希望能引导您朝着正确的方向前进。为此,您可以使用类似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

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

于 2015-04-07T13:51:27.883 回答
0

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

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

它指出:

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

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

于 2012-12-13T06:29:52.590 回答