sql >> Database >  >> RDS >> Sqlserver

BULK INSERT ontbreekt laatste rij?

Ik heb uw probleem gereproduceerd op SQL Server 2008 R2. De oplossing is zo simpel als het toevoegen van een nieuwe regel aan uw bestand, zodat de laatste rij eindigt met een nieuwe regel.

Ik heb twee bestanden gemaakt:

Voer vervolgens het volgende script uit:

CREATE TABLE #t(first_name VARCHAR(128),last_name_etc VARCHAR(128),sex CHAR(1),test VARCHAR(128));

BULK INSERT #t
FROM 'C:\temp\without_newline.txt'
WITH (
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
);

SELECT * FROM #t;

TRUNCATE TABLE #t;

BULK INSERT #t
FROM 'C:\temp\with_newline.txt'
WITH (
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
);

SELECT * FROM #t;

DROP TABLE #t;

Resultaat 1:

first_name  | last_name_etc     | sex | test
--------------------------------------------
Tom         | Jackson 2/28/1986 | M   | test

Resultaat 2:

first_name  | last_name_etc     | sex | test
--------------------------------------------
Tom         | Jackson 2/28/1986 | M   | test
Mike        | Johnson 1/29/1987 | M   | NULL

De oplossing zou zo simpel moeten zijn als ervoor zorgen dat de laatste regel eindigt met \r\n . Of u wijzigt het proces dat het tekstbestand genereert of u doet het handmatig vlak voordat u de bulkinvoeging uitvoert.

Een manier om dit handmatig te doen is door EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt' vlak voordat u de bulkinvoeging doet.




  1. Dynamische SQL (tabelnaam doorgeven als parameter)

  2. 1064, je hebt een fout in je SQL-syntaxis;... Python MySQL

  3. Ongeldig parametertype (numpy.int64) bij het invoegen van rijen met executemany()

  4. Het verschil tussen primaire sleutel en unieke sleutel