2016-03-29 28 views
5
BULK INSERT [Alldlyinventory] 
    FROM  'C:\Users\Admin\Documents\2NobleEstates\DATA\Download\Output\test.txt' 
    WITH (FORMATFILE = 'C:\SQL Data\FormatFiles\test.xml'); 

plik Format:Luzem Wstaw z formatu pliku (stała szerokość) - Nieoczekiwany koniec pliku napotkano

<?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="8"  COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
    <FIELD ID="2" xsi:type="CharFixed" LENGTH="7"  COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
    <FIELD ID="3" xsi:type="CharFixed" LENGTH="4"  COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
    <FIELD ID="4" xsi:type="CharFixed" LENGTH="1"  COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
    <FIELD ID="5" xsi:type="CharFixed" LENGTH="10"  COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
</RECORD> 
<ROW> 
    <COLUMN SOURCE="1" NAME="DAY_NUMBER" xsi:type="SQLNVARCHAR"/> 
    <COLUMN SOURCE="2" NAME="LCBO_NO" xsi:type="SQLNVARCHAR"/> 
    <COLUMN SOURCE="3" NAME="LOCATION_NUMBER" xsi:type="SQLNVARCHAR"/> 
    <COLUMN SOURCE="4" NAME="LISTING_STATUS" xsi:type="SQLNVARCHAR"/> 
    <COLUMN SOURCE="5" NAME="QTY_ON_HAND" xsi:type="SQLNVARCHAR"/> 
</ROW> 
</BCPFORMAT> 

Ale ja otrzymuję następujący błąd na SQL Server 2014:

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)".

To import o stałej szerokości.

próbki txt:

2016032803170570371L 000000014 
2016032803367430371L 000000013 
2016032803403800371L 000000036 
2016032804007540371L 000000015 
+0

Pozwól mi stwierdzić, oczywiste? ** Kolumna jest za długa w pliku danych dla wiersza 1, kolumna 1. Sprawdź, czy terminator pól i terminator wierszy są poprawnie określone. ** –

+0

Niestety, jest to wstawka o stałej szerokości – Ben

+0

Twój plik txt może mieć puste na końcu. Czy możesz użyć 'ERRORFILE' i znaleźć wiersz, który powoduje problem? Spróbuj także użyć 'ROWTERMINATOR = '0x0A'' (nieudokumentowanego), aby sprawdzić, czy to pomaga. – Kin

Odpowiedz

4

Patrząc na pliku tekstowego próbki, wygląda na to, że masz terminator wiersza, który jest powrót karetki ({CR}) + wysuw ({LF}).

Możesz to sprawdzić, otwierając plik tekstowy za pomocą edytora tekstu, który może wyświetlać specjalne symbole. Mogę polecić Notepad++, która jest darmowa i dobra do tego celu (Menu View>Show Symbol>Show All Characters).

Jeśli terminator wiersz jest rzeczywiście {CR}{LF}, należy użyć xsi:type="CharTerm" wraz z atrybutem TERMINATOR="\r\n" za ostatni <FIELD> w elemencie <RECORD>:

<RECORD> 
    ... 
    <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
</RECORD> 

można znaleźć więcej informacji na temat importu pola ustalona w poniższy link: XML Format Files (SQL Server) # Importing fixed-length or fixed-width fields

+0

Witam, dane kończą się z {CR} {LF}, ale pojawia się następujący błąd: Atrybutu "ROWTERMINATOR" nie można określić dla tego typu. Później zmieniłem ROWTERMINATOR na TERMINATOR i zadziałało. Wielkie dzięki. Naprawdę doceniam to forum i ludzi tutaj. – Ben

+0

@Ben Ach tak, masz rację, prawidłowym atrybutem jest 'TERMINATOR' (odpowiedź zaktualizowana). Cieszę się, że pomógł =). –