SQL Server – BulkInsert à partir du file .txt positionnel à l'aide de l'erreur de file .xml

Bonjour à tous, j'ai ce scénario: J'utilise la command 'BulkInsert' de SQL Server pour insert des données dans une table à partir d'un file positionnel (.txt). J'utilise, pour définir la structure du file, un file .xml qui définit la position (et la longueur) des champs et de leurs noms.

Voici deux exemples de lignes du file de position .txt:

AAA111111Surname 1 Name 1 BBB222222Surname 23 Name 99 

Mon file au format .xml est défini comme suit:

 <?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="1" xsi:type="CharFixed" LENGTH="3" /> <FIELD ID="2" xsi:type="CharFixed" LENGTH="6" /> <FIELD ID="3" xsi:type="CharFixed" LENGTH="20" /> <FIELD ID="4" xsi:type="CharFixed" LENGTH="20" /> <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\r\n" /> </RECORD> <ROW> <COLUMN SOURCE="1" NAME="AlfaCode" xsi:type="SQLNVARCHAR"/> <COLUMN SOURCE="2" NAME="NumericCode" xsi:type="SQLNVARCHAR"/> <COLUMN SOURCE="3" NAME="Surname" xsi:type="SQLNVARCHAR"/> <COLUMN SOURCE="4" NAME="Name" xsi:type="SQLNVARCHAR"/> </ROW> </BCPFORMAT> 

Mon code SQL Server est:

 DELETE from MY_TABLE BULK INSERT MY_TABLE FROM 'C:\Directory\InputFile.txt' WITH ( FORMATFILE = 'C:\Directory\FormatFile.xml' ) 

Mais quand je cours dans SQL Server le sp, j'ai l'erreur suivante:

 Msg 4866, Level 16, State 1, Line 3 The bulk load failed. The column is too long in the data file for row 1, column 58. Verify that the field terminator and row terminator are specified correctly. Msg 7399, Level 16, State 1, Line 3 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 3 Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". 

Cela a toujours fonctionné parfaitement jusqu'à il y a 2 mois, puis certaines données erronées ont été introduites dans le file et la procédure a échoué. Maintenant, datatables dans le file InputFile.txt sont à nouveau correctes, mais la procédure ne fonctionne pas J'ai vérifié plus de 1 fois InputFile.txt, FormatFile.xml et, bien sûr, aussi MY_TABLE, mais tout semble parfait.

Je suis désespéré parce que tout semble correct, j'ai comparé aussi les anciens files .xml substitués en ajoutant seulement quelques champs.

S'il vous plaît répondre dès que possible et désolé si mon anglais est très mauvais. N'essaye pas de me dire d'autres informations.

Merci à tous

Je pense que c'est très probablement votre file d'input doit encore être faux. (même si vous pensez que vous l'avez réparé).

Dans votre exemple, vous avez 50 caractères sur la ligne 1 avant le saut de ligne. Votre XML dit que vous ne devriez avoir que 49 caractères! (3 + 6 + 20 + 20) Votre deuxième ligne dans l'exemple a seulement 39 caractères avant le changement de ligne.

Il vaut probablement la peine d'ouvrir votre file txt dans un éditeur de text qui vous montrera les sauts de ligne. Par exemple, dans notepad ++, allez dans Affichage -> Afficher le symbole -> Afficher tous les caractères. Ensuite, vous pouvez voir les caractères CR et LF, pour vérifier qu'ils sont là.