2017-06-13 215 views
1

運行下面的代碼時,管理工作室會顯示設置它的錯誤。批量插入不插入數據

我需要通過BULK INSERT插入簡單的文本數據到表中。用於插入的代碼如下:

BULK INSERT Pais FROM 'C:\[bulkdata]\shared\01-Pais.txt' 
WITH(MAXERRORS = 0, CODEPAGE = 'ACP', FIELDTERMINATOR = 'ø', ROWTERMINATOR = '\n', KEEPNULLS, 
ERRORFILE = 'C:\[bulkdata]\shared\teste.txt') 

文件我使用中測試該命令僅具有一個用於插入數據線, teste.txt:

BrasilØ01058 

返回的錯誤如下:

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

teste.txt:

BrasilØ01058BrasilØ01058 

在我看來,這是試圖在同一行插入兩次值,但正如設置顯示,它通常插入到其他項目。我的用戶可以未經許可嗎?我已經創建了具有所有權限的特定用戶,並且還設置了服務器執行批量操作的權限。

teste.txt.Error.Txt:

Row 1 File Offset 0 ErrorFile Offset 0 - HRESULT 0x80004005 

enter image description here

+0

我要做的第一件事就是檢查文件的格式是否像記事本++中顯示隱藏字符一樣的真實文件..聽起來像它它尋找換行或回車或無論是在最後還是沒有得到。 – HLGEM

+0

我只是做了一個簡單的測試,似乎你正在使用javascript ....'var t1 ='ø'; var t2 ='Ø'; console.log(t1 === t2);'和結果是'false' – Hackerman

+0

我的意思是你的文件中的字段終止符和你的批量聲明中指定的字段終止符不一樣 – Hackerman

回答

2

這似乎是一個character問題,您可以用另一個像§嘗試。 你只需要做一個小的調整:

FIELDTERMINATOR = '§' 

而且你01-Pais.txt文件:

Brasil§01058  

更新:似乎還數據庫整理和文件編碼問題的組合,能已經搞亂了bulk操作。將文件保存爲ANSI而不是UTF-8似乎已更正原始問題。看來,也使用CODEPAGE=1252DATAFILETYPE = 'widechar'應該已經解決了這個問題。

+0

'行1列1(Id)的批量加載數據轉換錯誤(類型不匹配或指定代碼頁的字符無效)。 鏈接服務器「(null)」的OLE DB提供程序「BULK」報告了錯誤。提供者沒有提供任何關於錯誤的信息。 無法從鏈接服務器的OLE DB提供程序「BULK」中獲取一行「(null)」。 –

+0

現在要通過C#通過系統插入此錯誤。我正在使用實體框架來生成Seed。 –

+0

我發現了所有這些問題。包含數據的文件(例如我的bulkdata.txt)應該保存爲ANSI而不是它所在的UTF-8,只需在記事本中打開它並以此格式保存,以便使用我嘗試使用的第一個字符來解決問題。將此添加到您對其他人的回覆中。 –