Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Masseneinfügung mit FIRSTROW-Parameter überspringt die folgende Zeile

Ich glaube nicht, dass Sie Zeilen in einem anderen Format mit BULK INSERT überspringen können /BCP .

Wenn ich das ausführe:

TRUNCATE TABLE so1029384

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

SELECT * FROM so1029384

Ich bekomme:

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

Es sieht so aus, als ob es das '|' erfordert sogar in den Kopfdaten, weil es bis dahin in die erste Spalte einliest - und einen Zeilenumbruch in der ersten Spalte verschluckt. Wenn Sie einen Feldabschlussparameter einfügen, erwartet dieser natürlich, dass jede Zeile MUSS haben.

Sie könnten die Zeile mit einem Vorverarbeitungsschritt entfernen. Eine andere Möglichkeit besteht darin, nur vollständige Zeilen auszuwählen und sie dann zu verarbeiten (ohne die Kopfzeile). Oder verwenden Sie ein Tool, das damit umgehen kann, wie SSIS.