SQL SERVER, bulk insert ignorer déformée des lignes

- Je importer SAP unconvered listes. Ces rapports ont l'air assez laid et ne sont pas bien adaptés pour un traitement automatisé. Cependant il n'y a pas d'autre option. Les données sont borderd autour de moins et les symboles de tuyau semblable à l'exemple suivant:

02.07.2012
--------------------
Report name
--------------------
|Header1 |Header2  |
|Value 11|Value1 2 |
|Value 21|Value2 2 | 
--------------------

- Je utiliser un format de fichier et une instruction comme suit:

SELECT Header1, Header2
FROM  OPENROWSET(BULK  'report.txt',
FORMATFILE='formatfile_report.xml'  ,
errorfile='rejects.txt',
firstrOW = 2,
maxerrors = 100 ) as report

Malheureusement je reçois les suivantes code d'erreur:

Msg 4832, Level 16, State 1, Line 1
Bulk load: An unexpected end of file was encountered in the data file.
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "BULK" for linked server "(null)" reported an error. The provider did not give any information about the error.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

La rejette fichier txt contient la dernière ligne du fichier avec juste des inconvénients. L'rejects.txt.Error.Txt documents:

Row 21550 File Offset 3383848 ErrorFile Offset 0 - HRESULT 0x80004005

Le coupable qui déclenche l'erreur est bien évidemment la toute dernière ligne qui ne sont pas conformes au format tel que déclaré dans le fichier de format. Cependant, le laid en-tête ne cause pas de problèmes (au moins celui tout en haut).

Bien que j'ai défini le maxerror attribut très déformée de la ligne tue l'ensemble de l'opération. Si je supprimer manuellement la dernière ligne contenant tout ce que les "moins" ( - ) tout fonctionne bien. Depuis que l'importation sont fréquents et surtout sans surveillance supplémentaire de post-traitement n'est pas sérieux de la solution.

Quelqu'un peut-il m'aider à obtenir sql server pour être moins pointilleux et sensibles respectivement. Il est bon qu'il documents les lignes qui ne pouvait pas être chargé, mais pourquoi faut-il abandonner l'ensemble de l'opération? Et encore plus après une exécution d'une instruction qui a entraîné la création de l'reject.txt pas d'autres (ou les mêmes) instruction peut être exécutée avant que le fichier txt est supprimé manuellement:

Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "rejects.txt" could not be opened. Operating system error code 80(The file exists.).
Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "rejects.txt.Error.Txt" could not be opened. Operating system error code 80(The file exists.).

Je pense que c'est le comportement bizarre. Merci de m'aider à le supprimer.

EDIT - SUIVI:
Voici le format de fichier que j'ai utiliser:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
   <FIELD ID="EMPTY" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="100"/>
   <FIELD ID="HEADER1" xsi:type="CharTerm" TERMINATOR="|" MAX_LENGTH="100"/>
   <FIELD ID="HEADER2" xsi:type="CharTerm" TERMINATOR="|\r\n" MAX_LENGTH="100"/>
 </RECORD>
 <ROW>
   <COLUMN SOURCE="HEADER1" NAME="HEADER2" xsi:type="SQLNVARCHAR"/>
   <COLUMN SOURCE="HEADER2" NAME="HEADER2" xsi:type="SQLNVARCHAR"/>
 </ROW>
 </BCPFORMAT>
J'ai trouvé un meilleur support lorsque j'utilise le format de fichier avec largeur de colonne fixe (CharFixed au lieu de CharTerm). Ensuite, vous pouvez vérifier certains des colonnes pour les éléments prévus dans la clause where. Cependant, depuis SAP varie selon la largeur de la colonne, ce n'est pas une option dans mon cas d'utilisation.
Triste de voir qu'il semble vrai que SQL Server n'est tout simplement pas en mesure de gérer une ligne qui n'est pas 100% conforme au format. Pourquoi ne peut-il pas simplement l'ignorer et le journal de la ligne, puis continuer au lieu d'annuler l'ensemble de l'importation immédiatement. Pire encore, une sorte d'erreur de fichier est créé et aussi longtemps que l'on est présent (pas supprimés par l'utilisateur ou un programme externe) pas d'autres à l'importation peut être démarré! N'est-ce pas étrange comportement de logiciel professionnel?

OriginalL'auteur Toby | 2012-07-02