2010-06-24 79 views
5

我正在使用SSIS將數據從excel轉換爲OLEDB SQL。我在一個文件夾中有一組表單,我必須循環並將這些表單中的數據插入表中。我有一個場景,我必須通過一組具有不同列結構的Excel工作表來循環。我可以通過foreach循環遍歷每個表格循環枚舉器找到文件名並將它們傳遞給Excel源文件。SSIS - 動態列映射

我想知道是否有辦法在目標組件中轉義此列映射,在我的情況下這將是一個OLEDB SQL表。因爲這些映射對於每個文件都是不同的。有沒有辦法動態地做到這一點?

回答

5

雖然您可以在循環內添加腳本任務以修改映射,但這不是最簡單的操作,因爲您必須在代碼中顯式創建每個映射。一個更簡單的解決方案是用分隔文本文件替換Excel表格並使用批量插入任務在循環內部導入它們。只要文件和表格中的列順序相同,就不必提供任何映射信息。

如果你不能做到這一點,你就可以將映射元數據存儲在某個地方,例如,數據庫中的一個表,並使用它在腳本任務中創建動態映射。

一個稍微簡單的方法是隻使用一個使用元數據的腳本任務來配置SqlBulkCopy對象。您失去了完整數據流任務的靈活性,但如果您只想將某些文件加載​​到臨時數據庫中,就足夠了。另外,配置SqlBulkCopy對象比數據流任務要容易得多。

+0

如何使用腳本任務來配置SQLBulkcopy對象?有沒有我可以使用的鏈接?你可以請稍微簡單一點...對不起,這麼愚蠢 – Baaju 2010-06-24 08:03:23

+3

請嘗試SqlBulkCopyColumnMapping類的文檔http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopycolumnmapping.aspx作爲使用自定義映射的示例。它像提供源讀取器(用於Excel的OleDbDataReader),目標連接以及使用源列和目標列的名稱填充SqlBulkCopy對象的ColumnMappings屬性一樣簡單。您甚至可以將ColumnMappings列表保留爲空,在這種情況下,它會按照其序號位置映射列 - 就像Bulk Insert Task一樣。 – 2010-06-24 09:17:10