2014-11-22 45 views
0

我有3個帶有製表符分隔的數據的大型txt文件,這些文件用引號引起來。下面是從文件中的一個示例行:將引用數據導入到SQL中,丟失數據

"deleted for privacy" 185 "12/31/2005" "01/16/2009" "deleted for privacy" false 1 "Accounting Issues" "deleted for privacy" 0 0 0       1    0    0 "deleted for privacy" 

我已經刪除了一些潛在的敏感信息,但你的想法。它似乎是製表符分隔的,大多數值都用引號括起來,但不是全部。

問題是在將文件導入到SQL中後,兩個日期列顯示空白。因此,例如,其中一個原始文件具有500萬行,如上面的日期列中沒有空白的行。一旦我將它帶入SQL,那500萬行中有大約100萬行在這些日期列中沒有價值。我在導入過程中沒有收到任何錯誤。

其中一個大文件足夠小,我可以在記事本中打開它,並在導入到SQL之前從所有值中刪除引號。這似乎解決了這個問題。如果在導入到SQL之前刪除引號,則沒有日期值似乎丟失。問題是3個文件中的2個太大而無法在記事本中打開以刪除導入前的引號。

+0

哪一個mysql或sql-server? – 2014-11-22 20:20:01

+0

對不起。 SQL Server。 – 2014-11-24 14:54:48

回答

0

你沒有提到你用來做批量導入的工具,我會假設bcp或BULK INSERT語句。

我假設相應列的數據類型是日期 - 時間類型。在這種情況下,SQL服務器可能會錯誤地將日期格式解釋爲dd/mm/yyyy格式(歐洲),而不是mm/dd/yyyy(美式)格式。無法在給定樣式中轉換的值設置爲NULL。

我通常通過導入到所有列爲varchar(max)的臨時表中,然後運行後處理存儲過程以將導入的行從臨時表中導入到最終表中來解決數據導入問題,根據需要定義顯式轉換。另一種方法是使用自定義的dtsx包進行導入,並將所需的轉換定義爲數據轉換轉換任務。

+0

感謝您的洞察力。我沒有使用查詢來導入數據,我使用內置於SQL服務器的導入嚮導。我會嘗試從頭開始創意。 – 2014-11-24 18:46:37

+0

只是想讓你知道,刮桌的想法完美地工作。我帶了所有設置爲varchar(200)的字段的數據,然後在它們被引入後將其更改。謝謝! – 2014-12-02 15:10:47