2011-04-19 71 views
1

我第一次巴陵實現在SSIS平面文件數據到多個表使用SSIS

我有像4.5 GB的數據我的任務,我想上傳到SQL Server 2008中。 我的數據就像是4到6個數據表的組合,原始數據中沒有主鍵。含的信息

的多個表

一行現在我需要在到各表來分割該數據。

我的數據是這樣的

ROW1:COL1,COL2,COL3 ........... col125

現在我已經掌握表中插入某些列,如果我插入到主表中的記錄我必須得到最後插入的行ID,並使用該ID我必須插入coloumns的原始數據(COL5到col20等)到另一個表像..

最後插入的行是5

表1 5,col2 5,COL3 5,COL4 5,COL5並且具有插入另一個表

表3 5,COL12 5,col32 5,col45 5,col55

表4 5,col72 5,col82 5,col95 5,col105與第一行相同。

任何人都可以告訴我如何實現這個任務。請參閱已附加的文件(http://www.bidn.com/Assets/Uploaded-CMS-Files/fc8b892d-8652-4f0e-bdc6-56e297149315Table Extract.pdf

回答

2

我會提出一個帶有Dataflow的SSIS包,僅將源文件上載到文件的臨時表版本中。此時,我的包會調用一個執行SQL任務,這將啓動一個非常大的存儲過程來完成所有主/子工作。

如果性能不是非常重要,那麼在存儲過程中,創建一個遊標來讀取每一行,通過痛苦的行,並在表1中執行插入操作。捕獲scope_identity()值(在您的示例中爲5)並使用並將其餘列插入到表2-6中。泡沫,沖洗,重複。

更好的性能方法是對該數據執行基於集合的操作。這種模式需要更多的技巧才能完成,但完全可行。代替遊標,將所有行插入到表1中。要捕獲所有插入的標識值,您需要將OUTPUT子句用於表變量之類的東西。此時,您在輸入行(第1行= id 5,第2行= id 6等)之間有映射,並且可以在基於遊標的方法中執行相同的插入操作,不同的是使用列而不是變量。

如果你絕對必須使用SSIS的方式,你有我的哀悼。光標圖案可以應用於那裏,具有類似的性能結果。加載到數據流中的對象類型的SSIS變量,而不是加載到登臺表。創建126或任何變量在包中,然後shred the recordset