sql >> Database >  >> RDS >> Sqlserver

SQL Bulk Insert met FIRSTROW parameter slaat de volgende regel over:

Ik denk niet dat je rijen in een ander formaat kunt overslaan met BULK INSERT /BCP .

Als ik dit uitvoer:

TRUNCATE TABLE so1029384

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

SELECT * FROM so1029384

Ik krijg:

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

Het lijkt erop dat het de '|' vereist zelfs in de kopgegevens, omdat het tot dat leest in de eerste kolom - een nieuwe regel opslokken in de eerste kolom. Het is duidelijk dat als u een veldterminatorparameter opneemt, deze verwacht dat elke rij MOET heb er een.

Je zou de rij kunnen strippen met een voorbewerkingsstap. Een andere mogelijkheid is om alleen volledige rijen te selecteren en deze vervolgens te verwerken (exclusief de kop). Of gebruik een tool die dit aankan, zoals SSIS.



  1. Werken met SQL-cursors

  2. overschakelen van MySQL naar PostgreSQL voor Ruby on Rails omwille van Heroku

  3. Met behulp van rangorde-functie afgeleide kolom in waar-clausule (SQL Server 2008)

  4. 5 belangrijke voordelen voor Microsoft Access