2010-09-27 75 views
0

我有一个18GB的平面文件(40,000,000条记录),固定列宽(没有字段终止符),我想读入SQL Server 2008 R2表。除了带有数据的文本文件之外,还给我一个带有字段名称和长度的Excel文档。有270个字段,每个记录(每行)总共有465个字符。使用bcp我创建了一个fmt文件,这对我来说看起来很好。无法导入大型平板文件到SQL Server 2008表

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文件中读取数据到表:从SQL Server

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 

错误消息:

Msg 4866,Level 16,State 7,Line 1

T他批量加载失败。第1行的数据文件中列 太长。第1列为 。验证字段 终止符和行终止符是否正确指定为 。

消息7399,级别16,状态1,行

OLE DB提供程序 “BULK” 为链接 服务器 “(空)” 报告错误。 供应商没有给出关于错误的任何信息 。

消息7330,级别16,状态2,行1

无法获取来自OLE DB提供 “BULK” 链接服务器 “(空)” 一行。

我曾试图改变申请终止最后一个字段为“\ r”和“\ r \ n”个 我试图在底部增加一个额外的字段:

271 SQLCHAR 0 0 "\r\n" 271 dummy SQL_Latin1_General_CP1_CI_AS 

不做区别。

我一直没能找到任何有帮助的行。 (建议使用fmt文件中的额外空白行,但这并不能解决问题,我认为数据文件有行终止符,因为如果我使用Excel数据导入工具,我会看到长度一致的行。 ?帮助 谢谢,KRISS

+0

如果您发布的是代码或XML,**请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010)以更好地格式化和语法突出显示它! – 2010-09-28 07:15:55

回答

0

没有动手的工作,我只能提供一些想法和建议:

首先,你需要确定是否有行终止或不能 - 有可能是没有/ r/n,char(13)+ char(10),null-terminator,或其他文件中的任何内容

尝试并获取文件的副本,一个只包含前10个,100个,也许1000个工作的行。 (创建这将使查找行终止符的存在或不存在变得更容易)。那里有很多这样的编辑;我过去使用过LTFViewr,不确定他们现在使用的是哪个版本。

我记得BCP对于行列分隔符非常挑剔。如果事情不匹配,它会失败。 (我记得不得不调整文件中的奇数第一行或最后一行以使BCP工作。)

您是否考虑过使用集成服务(SSIS)?它更加灵活和适应性强,尽管它确实代表了截然不同的学习曲线。它有一个很大的优势,就是微软在2005年的版本上有所改进,我怀疑他们在过去的六年中甚至对BCP做过代码审查。

+0

谢谢。我确实开始使用SSIS。在平面文件连接管理器中,我将行宽设置为预期宽度,并且每行上的最后一个字符都是红色框,所以我认为这是一个特殊字符 - 也许CRLF,也许不是......(另外,我在Excel中进行了数据导入,我也看到所有行都是相同的宽度。)感谢您的帮助 - 我将随SSIS一起去。 BCP看起来好像很简单,但是...... – 2010-09-27 23:11:43

+0

SSIS的优点之一是可以找出很多“底层”的东西 - 比如行分隔符是什么。 – 2010-09-28 13:31:47