日期:2014-05-17  浏览次数:20555 次

BULK INSERT 出错时 ,会把出错行的下一行也写入错误文件?
源文件 内容 如下:
A1,A2,A3,A4
B1,B2,B3,B4
C1,C2,C3
D1,D2,D3,D4
E1,E2,E3,E4
F1,F2,F3
G1,G2,G3
H1,H2,H3,H4

使用 BULK INSERT 进行插入 ,表有4个字段 ,均为varchar(20) ,
但是执行 BULK INSERT 时 ,错误日志文件中记录内容为:

C1,C2,C3
D1,D2,D3,D4
F1,F2,F3
G1,G2,G3


不知道什么原因 ,在网上查了 MS的BUG修复 ,好像 MS SQL Server 7.0有修复 ,我使用的 2005 ,
不知道有什么办法可以解决这个的不 ?

因为错误日志文件中的 :D1,D2,D3,D4
这一行是正常数据。
------解决方案--------------------
整体倒进去再拆,要4项的不要3项的。
------解决方案--------------------
引用:
formatfile 没弄过 ,有没有例子看看 ?

http://msdn.microsoft.com/en-us/library/ms191234%28v=sql.100%29.aspx

不过你这个问题也不是formatfile所能解决的,我刚看了一下,你这种情况根本不是kb275614描述的bug,7.0已经修复了的bug,2005怎么可能没修复。

c1 c2 c3       c4
-- -- -------- --------
A1 A2 A3       A4
B1 B2 B3       B4
C1 C2 C3\r\nD1 D2,D3,D4
E1 E2 E3       E4
F1 F2 F3\r\nG1 G2,G3
H1 H2 H3       H4

C1,C2,C3 和 D1,D2,D3,D4 被认为是一条记录,第三列的列分隔符是逗号,所以一直扫到D1,第四列之后是行分隔符\n,所以第四列是D2,D3,D4。

这个问题必须在txt数据源解决,或者每行按一个字段整体导入再拆分筛选,或者用程序实现。