Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

L'insertion en bloc SQL avec le paramètre FIRSTROW ignore la ligne suivante

Je ne pense pas que vous puissiez ignorer des lignes dans un format différent avec BULK INSERT /BCP .

Quand je lance ceci :

TRUNCATE TABLE so1029384

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

SELECT * FROM so1029384

J'obtiens :

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

Il semble qu'il nécessite le '|' même dans les données d'en-tête, car il lit jusqu'à cela dans la première colonne - engloutissant une nouvelle ligne dans la première colonne. Évidemment, si vous incluez un paramètre de terminaison de champ, il s'attend à ce que chaque ligne DOIT en avoir un.

Vous pouvez supprimer la ligne avec une étape de prétraitement. Une autre possibilité consiste à ne sélectionner que des lignes complètes, puis à les traiter (hors en-tête). Ou utilisez un outil qui peut gérer cela, comme SSIS.