Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

L'inserimento in blocco SQL con il parametro FIRSTROW salta la riga seguente

Non credo che tu possa saltare le righe in un formato diverso con BULK INSERT /BCP .

Quando eseguo questo:

TRUNCATE TABLE so1029384

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

SELECT * FROM so1029384

Ottengo:

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

Sembra che richieda '|' anche nei dati dell'intestazione, perché legge fino a quello nella prima colonna, inghiottendo una nuova riga nella prima colonna. Ovviamente se includi un parametro di terminazione di campo, si aspetta che ogni riga DEVE averne uno.

È possibile rimuovere la riga con una fase di pre-elaborazione. Un'altra possibilità è selezionare solo le righe complete, quindi elaborarle (escludendo l'intestazione). Oppure usa uno strumento in grado di gestirlo, come SSIS.