我需要跳过文本文件中的第一行和最后一行。为此,我首先批量插入文件而不解析字段并计算它在临时表中的行数。然后我使用这个动态的sql代码将文件插入到我的表中:
SELECT @last_row = MAX(id)
FROM Pre_Staging_Table
SELECT @last_row = CAST(@last_row AS BIGINT) - 1
SELECT @bulk_insert =
'
BULK INSERT Staging_Table
FROM ''' + @filename + '''
WITH
(
FIRSTROW = 2
, LASTROW = ' + @last_row + '
, FIELDTERMINATOR = ''' + @field_terminator + '''
, ROWTERMINATOR = ''' + CHAR(10) + '''
)
'
EXEC(@bulk_insert)
问题...它使用文件的第3行开始最终批量插入!世界上为什么会发生这种情况?当我为预登台表执行批量插入时,将插入所有行。我没有在那里做任何FIRSTROW或LASTROW过滤器。
以下是我的数据文件的前4行:
09.0|A|DATA|START|20140626|20140626|005221|A|
346| |001|33 |P|FLIP |2014|00000|00|L|O|0| |0000000015|0| | |SNAP |19|000350000|00100| | | | | | | | | |4|000| | |AA |2014|01|01| |#
346| |001|33 | |FLIP |2014|00000|00|L|O|0| |0000000150|0| | |SNAP |00|000000000|00100| | | | | | | | | |4|000| | |AA |2014|01|01| |#
346| |001|33 |P|FLIP |2014|00000|00|L|O|0| |0000000027|0| | |SNAP |22|000125000|00100| | | | | | | | | |4|000| | |AA |2014|01|01| |#
这些行以LF结尾,而不是CRLF。所以我想知道我的代码是否有问题。我读了另一个线程并没有解决问题,因为看起来我的标题行确实包含至少一个在其他行中找到的分隔符。
更新:我通过将预登台表中的数据导出到只包含我想要的行的新文本文件然后重新导入它来解决这个问题。