我似乎无法弄清楚这是怎么回事.
以下是我尝试批量插入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.