2017-03-04 44 views
0

我不是棚屋裏最鋒利的工具,請耐心等待。我正在嘗試將csv文件導入Microsoft SQL Server 2016.但是,每當我嘗試執行此操作時,都會遇到錯誤。我認爲這可能與管道角色有關。我從網站上得到的文件有這樣的說法:導入具有管道字符的CSV文件。錯誤稱截斷

文本字段被管道字符(ascii 124)包圍。日期和數字字段不是。逗號分隔所有字段。

這裏是我的查詢看起來是這樣的:

CREATE TABLE cands16 (
    [Cycle] [char](4) NOT NULL, 
    [FECCandID] [char] (9) NOT NULL, 
    [CID] [char] (9) NULL, 
    [FirstLastP] [varchar] (50) NULL, 
    [Party] [char] (1) NULL, 
    [DistIDRunFor] [char] (4) NULL, 
    [DistIDCurr] [char] (4) NULL, 
    [CurrCand] [char] (1) NULL, 
    [CRPICO] [char] (1) NULL, 
    [RecipCode] [char] (2) NULL, 
    [NoPacs] [char] (1) NULL 
) ON [PRIMARY] 


BULK 
INSERT cands16 
FROM 'C:\aaa open secrets\CampaignFin16\Cands16.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 
GO 

這是我的錯誤:

Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 1, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 2, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 3, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 4, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 5, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 6, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 7, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 8, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 9, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 10, column 1 (Cycle). 
Msg 4863, Level 16, State 1, Line 19 
Bulk load data conversion error (truncation) for row 11, column 1 (Cycle). 
Msg 4865, Level 16, State 1, Line 19 
Cannot bulk load because the maximum number of errors (10) was exceeded. 
Msg 7399, Level 16, State 1, Line 19 
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 19 
Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)". 

這裏是我的CSV文件的嬰兒版本:

|2016|,|H4GA02060|,|N00035294|,|Greg Duke (R)|,|R|,|GA02|,| |,|Y|,|Y|,|C|,|RC|,| | 
|2016|,|H4GA02078|,|N00036257|,|Vivian Childs (R)|,|R|,|GA02|,| |,| |,| |,| |,|RN|,| | 
|2016|,|H4GA04116|,|N00035798|,|Thomas Brown (D)|,|D|,|GA04|,| |,| |,| |,| |,|DN|,| | 
|2016|,|H4GA04124|,|N00035862|,|Thomas Wight (D)|,|D|,|GA07|,| |,| |,| |,| |,|DN|,| | 
|2016|,|H4GA06087|,|N00026160|,|Tom Price (R)|,|R|,|GA06|,|GA06|,|Y|,|Y|,|I|,|RW|,| | 
|2016|,|H4GA08067|,|N00026163|,|Lynn A Westmoreland (R)|,|R|,|GA03|,|GA03|,| |,|Y|,|I|,|RI|,| | 
|2016|,|H4GA09065|,|N00036258|,|Bernard Fontaine (R)|,|R|,|GA09|,| |,| |,|Y|,|C|,|RL|,| | 
|2016|,|H4GA10071|,|N00035370|,|Mike Collins (R)|,|R|,|GA10|,| |,| |,| |,| |,|RN|,| | 
|2016|,|H4GA11046|,|N00035321|,|Susan Davis (R)|,|R|,|GA11|,| |,| |,| |,| |,|RN|,| | 
+1

我也有過這個問題。您是否將該表創建爲導入過程的一部分?如果是這樣,請嘗試使用create table syatement或使用嚮導先創建表。確保每列的長度足以容納內容。 –

+0

@FredrikRudberg我創建了表格,以便可以將導入的數據放入其中。我從網站上獲得了關於製作這張表格的說明,它給了我內容。該網站還指定每列需要多長時間來保存內容。你能告訴我如何使用edit create table語句創建表嗎?我 –

+0

錯誤消息告訴我,列的大小是不夠的 –

回答

2

該porblem關於列的大小。導入功能警告在導入過程中必須進行截斷,導致數據丟失。

增加表格列的大小或刪除管道字符。

0

在下一個版本的SQL Server,您也可以使用FIELDQUOTE字符。這是好心documented描述,因爲SQL Server 2008的版本在頁面上,可能混淆普通讀者:

BULK INSERT cands16 
    FROM 'C:\aaa open secrets\CampaignFin16\Cands16.txt' 
WITH (FIELDTERMINATOR = ',', 
     ROWTERMINATOR = '\n', 
     FIELDQUOTE = '|' 
    ); 

在平均時間,我最好的建議是將數據加載到一個臨時表,然後解析通過刪除第一個和最後一個字符將列分成單獨的列。

您可以通過使用'|,|'作爲字段分隔符並僅更改第一列和最後一列中的值來簡化此操作。

+0

我試過你的方法。它說:'FIELDQUOTE'附近的語法不正確。應該指出的是,FIELDQUOTE這個詞並沒有像我期望的那樣變成藍色 –

+0

我還必須在分隔符後面加上分號嗎? –

+0

@anang。 。 。分號是可選的,但建議使用。它確定一個聲明已經結束。 –