我似乎无法弄清楚这是怎么回事.
以下是我尝试批量插入sql Server 2005的文件示例:
***A NICE HEADER HERE*** 0000001234|SSNV|00013893-03JUN09 0000005678|ABCD|00013893-03JUN09 0000009112|0000|00013893-03JUN09 0000009112|0000|00013893-03JUN09
这是我的批量插入声明:
BULK INSERT soMetable FROM 'E:\filefromabove.txt WITH ( FIRSTROW = 2,FIELDTERMINATOR= '|',ROWTERMINATOR = '\n' )
但是,出于某种原因,我能得到的唯一输出是:
0000005678|ABCD|00013893-03JUN09 0000009112|0000|00013893-03JUN09 0000009112|0000|00013893-03JUN09
除非我完全删除标题并且不使用FIRSTROW参数,否则总是会跳过第一条记录.这怎么可能?
提前致谢!
解决方法
我不认为您可以使用BULK INSERT / BCP以不同的格式跳过行.
当我运行这个:
TRUNCATE TABLE so1029384 BULK INSERT so1029384 FROM 'C:\Data\test\so1029384.txt' WITH ( --FIRSTROW = 2,ROWTERMINATOR = '\n' ) SELECT * FROM so1029384
我明白了:
col1 col2 col3 -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ***A NICE HEADER HERE*** 0000001234 SSNV 00013893-03JUN09 0000005678 ABCD 00013893-03JUN09 0000009112 0000 00013893-03JUN09 0000009112 0000 00013893-03JUN09
看起来它需要’|’甚至在标题数据中,因为它读取到第一列 – 将换行符吞入第一列.显然,如果你包含一个字段终止符参数,它期望每一行必须有一个.
您可以使用预处理步骤剥离行.另一种可能性是只选择完整的行,然后处理它们(排除标题).或者使用可以处理此问题的工具,例如SSIS.