2010-10-07 111 views
1

我有一個名爲Animals的表。我從該表中提取數據以填充另一個系統。導入/粘貼Excel數據並將字段更改爲SQL表

我得到Excel數據和動物列表中需要進入動物表的動物。

Excel數據也會有其它標識符,如品種,膚色,年齡,最喜愛的玩具,獸醫等

這些標識符將與每一個新的excel文件更改。有些人可能會重複,其他人是全新的。

由於字段發生變化,我永遠不知道每個新的excel文件會出現哪些新字段,因此我的動物表只有動物標識和動物名稱。

我創建了一個Values表來保存所有其他標識符字段。該表的結構是這樣的:

AnimalId 
Value 
FieldId 
DataFileId 

然後我有持有價值表的關鍵在於每一個FieldId字段表。

我這樣做是因爲替代方法是在每次需要添加數據時都可能無法使用的字段中保留一個大表。一個有很多空列的大表。

我不確定我的方式是一種好方法。它看起來過於複雜。

但是,假設這是一個好方法,將這個excel數據存入我的Values表的最好方法是什麼?動物列表很容易添加到我的動物表中。但是對於每個標識符(品種,顏色等),我必須複製或導入這些值,然後更新表以分配匹配的FieldId(或者如果它尚不存在,請在Fields表中創建一個新的FieldId)。

如果有很多標識符,加載新數據是一個巨大的痛苦。我真的很掙扎,可以使用更好的系統。

任何意見,幫助,或只是指着我在一個更好的方向將非常感激。

謝謝。

回答

0

根據您的客戶(例如,我在Mac上使用SequelPro),您可能可以導入CSV。這通常很不穩定,但您也可以將Excel文檔導出爲CSV ...方便。

但是,這並沒有真正幫助您的數據庫結構。當然,使用外鍵是一個好主意,但是不顯眼地(並且容易地)輸入數據是需要一次一行地完成的。

但是,您可以嘗試修改這樣的內容以滿足您的需求,方法是首先將您的Excel文檔導出爲CSV格式,移除標題行(第一行),然後使用正則表達式將其更改爲大量的SQL。例如:

您的CSV:

myval1.1,myval1.2,myval1.3,myval1.4 
myval2.1,myval2.2,myval2.3,myval2.4 
... 

在這一點上,你可以這樣做:

myCsvText.replace(/^(.+),(.+),(.+)$/mg, 'INSERT INTO table_name(col1, col2, col3) VALUES($1, $2, $3)') 

,你知道列,他們的名字的數量,以及如何它們的值(通過正則表達式&替換)。

可能是一個很好的開始。

0

您的表格看起來不錯。由於您的字段數量可變,因此垂直擴展似乎合乎邏輯。儘管您可能希望通過將DataFileID和FieldID更改爲FieldName和DataFileName來讓自己更容易,除非您也將其用於很多其他表中。

不幸的是,從Excel中獲取數據到SQL Server中並不像從兩個Microsoft產品與其他人互相交流那樣容易。有幾條路線我知道你可以採用:

  1. 使用CSV文件而不是Excel文件。 Excel可以像Excel文件一樣輕鬆地編輯CSV文件,但在導入時,CSV是無限可靠的數據源。對於不同的Excel版本,您不會遇到不同文件格式的問題,Excel必須安裝在運行腳本的計算機上,或者具有自動數據類型識別的怪癖。可以使用BCP命令行工具,BULK INSERT命令或SSIS讀取CSV。然後使用存儲過程將水平大量列中的數據轉換爲純粹的垂直格式。

  2. 使用SSIS直接從Excel文件讀取數據。可以創建一個循環遍歷多個Excel文件的包。缺點是事先必須知道Excel文件的列格式和表格名稱,因此每次新的Excel格式到達時都必須創建一個不同的模板(帶有單獨的循環)。有第三方SSIS組件聲稱更靈活,但我還沒有測試過它們。

  3. 編寫抓取Excel文件的Visual C#程序或PowerShell腳本,提取數據並將其輸出到SQL表中。 Visual C#是一種非常簡單的語言,具有強大的Office和SQL Server接口。我不知道學習曲線開始有多大,但一旦完成,這將是一個非常容易編寫的程序。我也聽說過good things about Powershell

  4. 創建一個Excel宏,該宏使用VB代碼打開其他Excel文件,遍歷數據並將結果寫入預定義工作表或將CSV寫入磁盤。一旦一切都處於標準格式,使用上述方法之一就可以輕鬆導入數據。

因爲我有1)和2)以前的頭痛,我會建議3)或4)。由於我在VBA方面的經驗比Visual C#或PowerShell有更多的經驗,如果我很着急的話,我會去做4)。但我認爲3)長期來看是更好的投資。

(你也可以去冒險和使用其他的腳本語言,如Python,因爲我曾經做過,因爲Python是很酷,可惜的是python提供相當緩慢和有限的接口到SQL Server和Excel)

祝你好運!