我正在尝试使用以下内容将一个相当宽的(220列)数据集插入到SQL Server 2016表中:
BULK INSERT dbo.[table]
FROM 'C:\source.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0A'
);
从一开始我就遇到了行终结器的几个问题,但是当我修复它时,一切似乎都工作得很好#OX0A'而不是' \ n'直到我尝试处理一个相当大的文件(相对于我正在加载的其他文件)。为了给你一个想法,它包含大约220列(目标是NVARCHAR(255),源几乎是INT)和10 000行。文件大小不超过40mb。
以下是我遇到的错误:
Msg 7399, Level 16, State 1, Line 6
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 6
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".
更多信息:
如果我使用FIRSTROW和LASTROW,我会得到同样的错误。
尝试查找有问题的行时,一旦我开始删除行,文件就开始工作了(当我的集合中有大约1910行时开始工作)。
我删除行的位置并不重要,如果我保留顶部1910行或底部1910行它可以工作,但只要我添加更多行(它们是有效的)它再次休息。
我大约99%确定我的行结尾或其他格式问题没有任何问题。
即使失败,错误文件仍然是空的。
我的直觉是它与内存管理有关,但据我所知,我的内存最大化,文件本身相当小,不应该给我内存问题。
有什么建议吗?
答案 0 :(得分:1)
您是否可以尝试在该文件上执行SAVE,并查看该文件的编码是否为ANSI之外的其他内容?我个人从来没有使用过标准'\ n'ROWTERMINATOR以外的任何东西。 '0x0A'听起来很奇怪。
修改:
尝试这些并查看其中任何一个是否成功:
SELECT A. * FROM OPENROWSET(BULK'C:\ source.txt',SINGLE_CLOB)AS A
使用bcp导入并查看是否收到相同的错误
使用BATCH_SIZE,ROWS_PER_BATCH。请在尝试之前通过此链接,因为有影响。 https://technet.microsoft.com/en-us/library/ms188267(v=sql.105).aspx
尝试从导出/导入向导导入(右键单击数据库 - >任务 - >导入并通过屏幕)。看看这是否有效。
尝试使用OPENROWSET插入
插入dbo.Table SELECT A. * FROM OPENROWSET(BULK'C:\ source.txt',FORMATFILE ='C:\ source.Xml'
)作为A
现在您需要使用此处的说明生成formatfile Source.xml - > https://msdn.microsoft.com/en-us/library/ms191516.aspx
bcp是SQL Server附带的命令行工具。与从SSMS查询窗口运行的BULK Insert不同,这是一个外部工具。有关如何在上面的链接上使用它来生成格式文件(或其他方面)的大量帮助。古德勒克我稍后会回来查看。
答案 1 :(得分:0)
在Notepad ++中查看该文件。这应该会告诉你发生了什么。我确定这不是你的想法!!