使用FIRSTROW参数的SQL批量插入会跳过以下行

前端之家收集整理的这篇文章主要介绍了使用FIRSTROW参数的SQL批量插入会跳过以下行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎无法弄清楚这是怎么回事.

以下是我尝试批量插入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.

原文链接:https://www.f2er.com/mssql/79767.html

猜你在找的MsSQL相关文章