2011-08-24 354 views
0

最後到達我的項目的數據遷移部分,現在嘗試將數據從MySQL遷移到SQL Server。ssis數據遷移 - 使用新代理鍵的主詳細記錄

SQL Server有新的模式(映射不總是一對一)。

我試圖使用SSIS進行轉換,我今天早上開始學習。

我們在MySQL中有客戶和客戶位置表以及SQL Server中的等效表。在SQL服務器中,我所有的表現在都有代理鍵列(GUID),而且我在腳本組件中創建了相同的列。

另請注意,我在當前的mysql表中有一個主鍵。

我在找什麼是我可以添加子記錄到客戶位置表與新創建的GUID作爲父鍵。

我看到SSIS有Foreach循環容器,這裏有什麼用處。

如果不是我能想到的另一種可能性是在主數據發送到主數據流任務上的目標組件[表]之前創建兩個數據流任務並[以某種方式],則添加一個帶有新創建的GUID的變量,而另一個與舊的PrimaryID,它將用於爲子記錄創建DataTask Flow的源代碼。

可能是簡單的,這也可以在master的datatask完成後完成,然後child的datatask讀取此主數據並將子記錄從MySQL插入到SQL Server表中。這雖然意味着我必須將所有父表的記錄載入內存。

我知道這是太混亂,這主要是因爲我很困惑:-(,忍耐一下,如果你想了解更多的信息讓我知道。

我一直到五月鏈接,我通過谷歌搜索發現,但沒有人真正解釋(或者我是不是能夠uderstand)的過程是如何進行的。

請告知

問候,

**編輯** 1

後繼續搜索和提煉關鍵詞,我發現這個鏈接SO和經歷它,看它是否能在我的情況

How to load parent child data found in EDI 823 lockbox file using SSIS?

回答

0

OK使用這是我會做的。將我的sql數據放入sql server中設置了標識列的登臺表,併爲最終的GUID添加一個額外的列,該列將從空開始。現在你的記錄有一個主鍵。

接下來是偷偷摸摸的把戲。選擇一個必填字段(我們使用last_name),而不是真正的數據,將值插入登臺表中的id字段。現在你有一個既有guid又有id的記錄。通過在ID和您選擇的必填字段上聯繫它來更新登臺表中的guid字段。現在用實際數據更新last_name字段。

爲了避免偷偷摸摸的把戲,如果這只是一次性上傳,請在包含臨時表ID的表中添加一列。再次,您可以使用它來獲取插入到相關表格的指導。然後當你完成後,放下額外的列。

您知道使用GUID時存在性能問題嗎?確保不要使它們成爲聚集索引(因爲它們將默認爲PK,除非您指定不同)並使用newsequentialid()填充它們。你爲什麼使用GUID?如果身份能夠起作用,通常使用它會更好。

+0

@ HLGEM-謝謝您的建議。我會努力的。 GUID的原因來自Domain Concerns,是的,我們知道性能問題。將使用我的結果更新你 – TheMar

+0

@ HLGEM-我使用你的建議的一半。我決定在目標表中添加額外的列,然後再放下它們。我遇到查詢組件沒有得到任何匹配的記錄,一旦我有控制流工作,我會來更新這個答案。 – TheMar

+0

@ HLGEM-我發佈了關於查找的另一個問題。 SSIS:查找組件:行在查找過程中沒有找到匹配(http://stackoverflow.com/questions/7209231/ssis-lookup-component-row-yielded-no-match-during-lookup)。如果你能指出我在正確的方向。我想在這裏問一下,但後來我認爲不要混淆這個空間 – TheMar