我有一个18GB的平面文件(40,000,000条记录),具有固定的列宽(没有字段终止符),我想将其读入SQL Server 2008 R2表。除了包含数据的文本文件外,我还获得了一个带有字段名称和长度的Excel文档。每个记录(每行)有270个字段,总字符数为465。使用bcp我创建了一个fmt文件,对我来说很好看。
10.0
270
1 SQLCHAR 2 1 "" 1 TitleCode SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 2 12 "" 2 FamilyID SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 2 12 "" 3 LocationID SQL_Latin1_General_CP1_CI_AS
等
在SQL Server中,我想使用此fmt文件将数据读入表中:
BULK INSERT dbo.Customer2_noId
FROM 'C:\Uploads\dataFile_MICX\dataFile_MICX_Copy.txt'
WITH (FORMATFILE = 'C:\Users\kriss\SqlScripts\Customer2_noId-n.fmt');
GO
来自SQL Server的错误消息:
Msg 4866,Level 16,State 7,Line 1
批量加载失败。专栏是 第1行的数据文件中的时间太长, 第1列。验证该字段 终结符和行终止符是 指定正确。
Msg 7399,Level 16,State 1,Line 1
链接的OLE DB提供程序“BULK” 服务器“(null)”报告错误。该 提供商没有提供任何信息 关于错误。
Msg 7330,Level 16,State 2,Line 1
无法从OLE DB中获取行 提供商“BULK”用于链接服务器 “(空)”。
我尝试将最后一个字段的字段终结符更改为“\ r \ n”和“\ r \ n” 我尝试在底部添加一个额外的字段:
271 SQLCHAR 0 0 "\r\n" 271 dummy SQL_Latin1_General_CP1_CI_AS
没有任何区别。
我找不到任何有帮助的东西。 (建议使用fmt文件中的空白行,但这不能解决问题。我认为数据文件有行终止符,因为如果我使用Excel数据导入工具,我会看到一致长度的行。
有人可以帮忙吗? 谢谢,Kriss
答案 0 :(得分:0)
如果没有亲身实践的工作,我只能提供一些想法和建议:
首先,您需要确定是否存在行终止符 - 可能没有/ r / n,char(13)+ char(10),null-terminator或文件中的任何内容。< / p>
尝试获取该文件的副本,该副本仅包含要使用的前10行,100行或1000行。 (创建此选项可以更容易地找到行终止符的存在与否)。那里有很多这样的编辑;我过去使用过LTFViewr,不知道他们现在的版本是什么。
我记得BCP对它的行和列分隔符非常挑剔。如果某些东西不匹配,它就会失败。 (我记得不得不调整文件中奇数的第一行或最后一行以使BCP工作。)
您是否考虑过使用整合服务(SSIS)?虽然它确实代表了一个截然不同的学习曲线,但它更灵活,更具适应性。它有一个很大的优势,就是微软在2005版本上已经对它进行了改进,我怀疑他们在过去的六年中甚至对BCP进行了代码审查。