2015-05-21 59 views
0

我有一箇舊的數據庫(OldDB)與表(我們稱之爲Call),我使用SSIS(2008年)和一個新的數據庫(NewDB)具有以下設置:使用外鍵數據導入SSIS?

  • OldDB.Call有一欄所謂Status目前爲varchar(1)持有的值,如「C」,「d」等
  • NewDB現在在自己的表中的所有可能的狀態映射與外鍵約束,使OldDB.Call.Status現在NewDB.CallStatus.idNewDB.Call.StatusID中的數據示例爲1,23等等。
  • NewDB.CallStatus現在有一個稱爲Status列保持所述實際爲nvarchar(1)的值ABC

我使用SSIS遷移數據。到目前爲止,我知道我需要對每個源使用Sort轉換,然後使用Merge Join轉換將新的NewDB.Call.StatusID映射到OldDB.Call.Status值。無論出於何種原因,它似乎開始很好,但最終抓住其他列(例如像描述列),並在那裏推錯了錯誤的數據類型。簡而言之,它並不像它應該那樣映射外鍵。

我在網上找到了很多關於如何做到這一點的例子(like this),但似乎我錯過了一些關鍵的重要信息,以便了解我在做什麼,因爲我一直在爲它做點什麼。

在一個完美的世界中,一步一步將是偉大的,但一個好的和簡潔的教程或解釋也會有用。 總之,我需要知道如何掛接這兩個表並將OldDB中的值映射到NewDB中的外鍵,並將該值存儲在NewDB.CallStatus中。

+1

兩件事。首先:你可以張貼你的軟件包的屏幕截圖,這樣我們可以更好地瞭解你錯過了什麼。沒有這些,我們只是猜測。第二:通常認爲有一列是varchar(1),因爲它不是可變長度。它總是1. – Zane

+0

varchar(1)是遺留的,我們正在消除,謝天謝地。 Aaand我不能再做屏幕截圖了,因爲它只是作爲一個加入sql腳本的速度要快得多 - 我們希望在SSIS中實現自動化,但是......已經這麼做了......謝謝。 – MetalPhoenix

回答

1

我會使用Lookup Transformation來滿足這個需求。

內查找定義,連接將指向您NewDB.CallStatus(寫SELECT是最好的做法,而不是隻選擇表 - 它緩存元數據)。在「列」窗格上,將「狀態」映射到「狀態」,然後選擇「狀態ID」作爲查找列。

現在您的數據流將在下游添加該列,並且您可以將其交付(通常使用OLE DB目標)。

查找的默認模式是完全緩存,這將是更快,使用更少的內存相比排序&合併方案。