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

Định dạng file:Chèn hàng loạt với định dạng (Fixed Width) - cuối tệp không mong đợi được gặp

<?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> 

Nhưng tôi nhận được lỗi sau trên 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)".

Đó là một chiều rộng cố định nhập khẩu.

mẫu txt:

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

Hãy để tôi nêu rõ điều này? ** Cột quá dài trong tệp dữ liệu cho hàng 1, cột 1. Xác minh rằng trình kết thúc dòng và đầu mối của trường được chỉ định chính xác. ** –

+0

Xin lỗi, đây là tệp chèn số lượng lớn cố định – Ben

+0

Tệp txt của bạn có thể trống cuối cùng. Bạn có thể sử dụng 'ERRORFILE' và tìm hàng gây ra sự cố không? Ngoài ra, hãy thử sử dụng 'ROWTERMINATOR = '0x0A'' (không có giấy tờ) để xem liệu nó có giúp ích hay không. – Kin

Trả lời

4

Nhìn vào tập tin văn bản mẫu của bạn, có vẻ như bạn có một terminator hàng đó là vận chuyển trở lại ({CR}) + linefeed ({LF}).

Bạn có thể kiểm tra điều này bằng cách mở tệp văn bản bằng trình chỉnh sửa văn bản có thể hiển thị các ký hiệu đặc biệt. Tôi có thể giới thiệu Notepad++ miễn phí và tốt cho mục đích này (Menu View>Show Symbol>Show All Characters).

Nếu terminator hàng thực sự là {CR}{LF}, bạn nên sử dụng xsi:type="CharTerm" cùng với một thuộc tính TERMINATOR="\r\n" cho người cuối cùng <FIELD> trong các yếu tố <RECORD>:

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

Bạn có thể tìm thêm thông tin về nhập khẩu lĩnh vực cố định ở liên kết sau: XML Format Files (SQL Server) # Importing fixed-length or fixed-width fields

+0

Xin chào, dữ liệu kết thúc bằng {CR} {LF} nhưng tôi gặp phải lỗi sau: Thuộc tính "ROWTERMINATOR" không thể được chỉ định cho loại này. Sau đó, tôi đã thay đổi ROWTERMINATOR thành TERMINATOR và nó hoạt động. Cảm ơn rất nhiều. Tôi thực sự đánh giá cao diễn đàn này và những người ở đây. – Ben

+0

@Ben Ah có bạn là chính xác, thuộc tính chính xác là 'TERMINATOR' (câu trả lời được cập nhật). Vui vì nó đã giúp =). –

Các vấn đề liên quan