Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Bulk Insert com parâmetro FIRSTROW pula a seguinte linha


Eu não acho que você pode pular linhas em um formato diferente com BULK INSERT /BCP .

Quando eu executo isso:
TRUNCATE TABLE so1029384

BULK INSERT so1029384
FROM 'C:\Data\test\so1029384.txt'
WITH
(
--FIRSTROW = 2,
FIELDTERMINATOR= '|',
ROWTERMINATOR = '\n'
)

SELECT * FROM so1029384

Eu recebo:
col1                                               col2                                               col3
-------------------------------------------------- -------------------------------------------------- --------------------------------------------------
***A NICE HEADER HERE***
0000001234               SSNV                                               00013893-03JUN09
0000005678                                         ABCD                                               00013893-03JUN09
0000009112                                         0000                                               00013893-03JUN09
0000009112                                         0000                                               00013893-03JUN09

Parece que requer o '|' mesmo nos dados do cabeçalho, porque ele lê isso na primeira coluna - engolindo uma nova linha na primeira coluna. Obviamente, se você incluir um parâmetro de terminador de campo, ele espera que cada linha DEVE tem um.

Você pode remover a linha com uma etapa de pré-processamento. Outra possibilidade é selecionar apenas linhas completas e processá-las (excluindo o cabeçalho). Ou use uma ferramenta que possa lidar com isso, como o SSIS.