J'ai reproduit votre problème sur SQL Server 2008 R2. La solution est aussi simple que d'ajouter une nouvelle ligne à votre fichier afin que la dernière ligne se termine par une nouvelle ligne.
J'ai créé deux fichiers :
Ensuite, exécutez le script suivant :
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;
Résultat 1 :
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Résultat 2 :
first_name | last_name_etc | sex | test
--------------------------------------------
Tom | Jackson 2/28/1986 | M | test
Mike | Johnson 1/29/1987 | M | NULL
La solution devrait être aussi simple que de s'assurer que la dernière ligne se termine par \r\n
. Soit vous modifiez le processus qui génère le fichier texte, soit vous le faites manuellement juste avant de faire l'insertion en masse.
Une façon de le faire manuellement serait d'exécuter EXEC xp_cmdshell 'echo. >> C:\temp\without_newline.txt'
juste avant de faire l'insertion en masse.