2013-04-08 168 views
13

我有一件奇怪的事情發生在使用導入和導出數據工具將數據從Excel導入到SQL Server中。從Excel導入數據到SQL Server無法導入所有數據

缺點是我可以在Excel中看到數據,但所有數據都不會導入。

我有一個包含一個電子表格的Excel工作簿。我可以看到列中的數據,一切看起來都不錯。當我使用導入嚮導導入數據時,我可以看到列和預覽數據,但是執行導入時數據不會全部轉移。沒有錯誤,導入過程完成 - 它只是將一堆空值插入到表中。

它似乎發生的最多的數字 - 所以假設我有三列的名字,姓氏和身份證號碼。我會得到所有的名字和姓氏,以及一些身份證號碼。我無法找到發生的事情的模式。

之前我曾經發生過這種情況,並且我注意到在導入過程中有兩個電子表格可供選擇:DataImport和DataImport $ - 第一個將失敗,如上所述,第二個將無誤地導入。這次只有一個電子表格可供選擇。

我主要在64位系統上使用XLS文檔和32位導入嚮導,但我願意嘗試任何操作。

任何想法爲什麼有兩個電子表格(有時),爲什麼這個導入會失敗?

Dave

+1

您可以嘗試複製確切的數據範圍,然後創建一個新的Excel文件,但在粘貼數據之前,您可以將新創建​​的Excel文件的單元格格式設置爲文本並嘗試導入此新文件。 – 2013-04-08 17:13:47

+1

我試過將所有的格式都改爲普通文本,並沒有幫助。我注意到一些數字字段有小三角形,表示相鄰的單元格是數字,這是文本,因此我試圖將列格式更改爲一個或另一個。雖然結果沒有變化。 我從來沒有試圖將數據複製並粘貼到新的電子表格中,但我可以嘗試一下。我會在幾分鐘之內告訴你這是怎麼回事。 – 2013-04-08 17:17:43

+1

沒有運氣。複製和粘貼技巧不起作用。我注意到失敗的列有三個正確的行,然後是一個應該是空白的行(對於該ID列),然後沒有任何東西被導入(對於該ID列)。此外,如果有問題,我正在使用Excel 2013。 – 2013-04-08 17:22:31

回答

0

您正在使用導入嚮導,不是嗎?單擊向導的「選擇源表和視圖」頁面上的Edit Mappings,然後選中每個源列的「類型」,「可爲空」和「大小」列。這聽起來像是一些東西沒有得到正確的映射。

+0

是的,我正在使用嚮導。每次我手動檢查(或在某些情況下創建)映射,所以我很確定它們是正確的。多年來,我一直使用excel來傳輸數百萬行,但是我有一個客戶端提供了一個並不總是有效的導入文件,所以我很茫然。 – 2013-04-08 22:52:11

0

最有可能是那個空白的行導致Sql Server忽略其餘的數據。 Bu確定你能分享excel文件的模式和前五行嗎?正確的三條和下兩條記錄。

+0

不幸的是,我不能分享這個電子表格 - 因爲我的理論是手動編輯電子表格會污染數據,所以我不知道編輯它並上傳它是否有價值。不過,如果你認爲這會有所幫助,我可以嘗試一下。 – 2013-04-09 16:56:56

+0

您可以嘗試將excel文件保存爲csv並將其導入爲csv文件?這可能會讓我們更深入地瞭解導致此問題的原因。 – 2013-04-09 17:56:56

+0

我將該文件作爲製表符分隔的文件導出,然後重新導入並運行。從長遠來看,這個解決方案最終將工作,但我很想知道爲什麼Excel失敗。 – 2013-04-15 18:34:34

32

您的問題的答案可能涉及如何將數據存儲在Excel中。

我剛碰到同樣的問題。我有一列包含兩種類型的值:數字和數字與破折號。 (例如51000和2009-00949)我需要將它們導入爲NVARCHAR或VARCHAR,但是SQL導入嚮導(SQL2005)只能導入數字而不導入數字,而不是數字,而使用破折號或數字代替破折號而不是數字,具體取決於第一條記錄中的類型。未導入的值將在該字段中具有「空」值,導致我的記錄無用。我嘗試使用Excel(數字,文本,一般等)中的格式|單元格菜單選項和SQL(nvar,nvarchar,varchar,sqlvariant,float)中的各種映射選項,但沒有成功。

解決方案是使用Excel中的Data | Text To Columns選項,而不是單元格格式選項將數字值存儲爲文本。當我在列上使用它時,數值(例如51000)轉換爲存儲爲文本值的數字(左上角出現小綠色三角形錯誤),帶破折號的數字保留爲文本。我不得不以這種格式保留數據,出現綠色小三角形錯誤,否則將無法成功導入到SQL中。當列中的數據以此格式存儲時,兩種類型的列數據(帶短劃線的數字和數字)與其他記錄數據正確導入,列中沒有空值。

+1

本週我又在處理這個問題,所以你的回覆是及時的。我注意到格式化電子表格確實有幫助,但這並非萬無一失。我已經遇到過一些格式化數據的情況,正如你所描述的那樣,有些情況下不會。我無法找到它背後的韻律或原因。 – 2014-01-09 19:31:03

+2

+100!輝煌。我一直在不停地戰鬥,解決方法非常簡單。我希望我能想到它。謝謝! – 2014-09-05 22:23:28

+1

謝謝!這讓我感到非常緊張,Data | Text To Columns是解決方案! – Neil 2014-11-19 18:14:58

1

我的問題是,我導入的文件是一個較舊的,有點惡意的Excel文件。我打開文件並將其保存爲.xlsx文件,並在此之後成功導入並且沒有空數據的文件。

0

選擇該列的所有行並將類型更改爲Excel中的文本然後選擇整個列並將類型更改爲文本肯定會工作。

0

我也有這個問題。我能夠解決它的唯一方法是將.xlsx文件保存爲.csv文件,然後將.csv文件用於SQL Server「導入數據」。

看來Microsoft Excel和Microsoft SQL Server之間的集成將會更加清晰。

我的版本是: 的Excel 2013年 SQL Server 2012的

+1

我無法使用CSV,但將XLSX另存爲XLS並使用32-but導入程序似乎給了我一些可靠的結果。 – 2016-05-19 12:47:43

1

我能夠使文本數據是在頂部的數據排序來解決這個問題。這樣SQL Server知道它是文本數據,而不是數字數據。

0

我遇到完全相同的問題使用.xlsx文件解決了我的問題。

0

最後格式化單元格到一般工作的地方有數字值,早些時候顯示%s,但現在它解決了。