【发布时间】:2012-05-08 21:57:05
【问题描述】:
我正在批量插入:
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;
并收到以下错误:
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 行,然后出现错误
【问题讨论】:
-
我建议先尝试不同的行终止符更容易。
char(10)这样的情况并不常见。试试'\n'或'\r\n'- 调查生成文件的程序和操作系统也可能有用。 -
@AaronBertrand 所以无法识别该行?
-
我不知道,不。如果您已经排除了第 2/3 行(通过设置 @Gordon 建议的
LastRow),您可以使用二进制除法快速缩小范围 - 获取文件中的行数并设置LastRow = <half that number>- 如果错误仍然发生,将其分成两半,然后重试。很可能它是第一行数据,也可能是因为您没有将ROWTERMINATOR与文件中的实际行终止符匹配。你试过\n或\r\n了吗?
标签: sql sql-server sql-server-2008 bulkinsert