首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >确定在大容量插入中导致“文件意外结束”错误的行?

确定在大容量插入中导致“文件意外结束”错误的行?
EN

Stack Overflow用户
提问于 2012-05-09 05:57:06
回答 10查看 103.6K关注 0票数 31

我正在进行批量插入:

代码语言:javascript
复制
DECLARE @row_terminator CHAR;
SET @row_terminator = CHAR(10); -- or char(10)

DECLARE @stmt NVARCHAR(2000);
SET @stmt = '
  BULK INSERT accn_errors
   FROM ''F:\FullUnzipped\accn_errors_201205080105.txt''
   WITH 
      (
        firstrow=2,
FIELDTERMINATOR = ''|''  ,
ROWS_PER_BATCH=10000
   ,ROWTERMINATOR='''+@row_terminator+'''
   )'
exec sp_executesql @stmt;

并且我得到了以下错误:

代码语言:javascript
复制
Msg 4832, Level 16, State 1, Line 2
Bulk load: An unexpected end of file was encountered in the data file.
Msg 7399, Level 16, State 1, Line 2
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 2
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

有没有办法知道这个错误发生在哪一行?

我能够顺利地导入10,000,000行,之后就会发生错误

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-10-30 04:29:17

要定位麻烦的行,请使用errorfile说明符。

代码语言:javascript
复制
BULK INSERT myData
FROM 'C:\...\...\myData.csv'
WITH (
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
ERRORFILE = 'C:\...\...\myRubbishData.log' 
);

myRubbishData.log将包含有问题的行,一个配套文件myRubbishData.log.txt将为您提供行号和文件中的偏移量。

配套文件示例:

代码语言:javascript
复制
Row 3 File Offset 152 ErrorFile Offset 0 - HRESULT 0x80004005
Row 5 File Offset 268 ErrorFile Offset 60 - HRESULT 0x80004005
Row 7 File Offset 384 ErrorFile Offset 120 - HRESULT 0x80004005
Row 10 File Offset 600 ErrorFile Offset 180 - HRESULT 0x80004005
Row 12 File Offset 827 ErrorFile Offset 301 - HRESULT 0x80004005
Row 13 File Offset 942 ErrorFile Offset 416 - HRESULT 0x80004005
票数 55
EN

Stack Overflow用户

发布于 2012-05-09 06:19:12

有趣,有趣,有趣。我还没有找到调试这些问题的好方法,所以我使用暴力破解。也就是说,FirstRow和LastRow选项非常有用。

从LastRow =2开始并继续尝试。将结果加载到一个可以随时截断的一次性表中。

而且,您还应该记住,第一行也可能会给您带来问题。

票数 6
EN

Stack Overflow用户

发布于 2015-10-29 04:48:30

我有一个使用批量导入的csv文件

代码语言:javascript
复制
BULK INSERT [Dashboard].[dbo].[3G_Volume]
FROM 'C:\3G_Volume.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '","',
ROWTERMINATOR = '\n'
)
GO

我通常使用这个脚本,它没有问题,但在极少数情况下。

我遇到这个错误..

链接服务器"(null)“的OLE DB访问接口"BULK”报告了一个错误。该访问接口未提供有关该错误的任何信息。

通常,当最后一行有空值(Null)时就会发生这种情况。

您需要在MS access数据库中链接csv文件以检查数据。(如果您的csv不超过140万行,您可以在excel中打开它)

因为我的数据大约有300万行,所以我需要使用access db。

然后用空格检查最后一行的数量,并将空行的数量减去csv的总行数。

如果末尾有两个空白行,总行数为30000005,脚本将如下所示。

代码语言:javascript
复制
BULK
INSERT [Dashboard].[dbo].[3G_Volume]
 FROM 'C:\3G_Volume.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = '","',
ROWTERMINATOR = '\n',
Lastrow = 30000003
)
GO

干杯..。马赫博伊

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10507162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档