我有一个旧数据库(OldDB
),其中包含一个表(我称之为Call
),我正在使用SSIS(2008)和一个新数据库({{ 1}})使用以下设置:
NewDB
有一个名为OldDB.Call
的列,当前为varchar(1),其值包含&#34; C&#34;,&#34; D&#34;等< / LI>
Status
现在使用外键约束映射其自己表中的所有可能状态,以便NewDB
现在为OldDB.Call.Status
NewDB.CallStatus.id
中的数据示例是NewDB.Call.StatusID
,1
,2
等等。 3
现在有一个名为NewDB.CallStatus
的列,它保存实际的nvarchar(1)值Status
,A
,B
等。我使用SSIS迁移数据。到目前为止,我知道我需要为每个源使用Sort转换,然后使用Merge Join转换将新C
映射到NewDB.Call.StatusID
值。无论出于何种原因,它似乎开始很好但最终会抓住其他列(例如描述列)并在那里推送错误类型的数据。简而言之,它不像它应该那样映射外键。
我在网上发现了很多关于如何做到这一点的例子(like this),但似乎我错过了一些重要的关键信息,以便了解我和# 39;我这样做是因为我一直在蠢蠢欲动。
在一个完美的世界中,一步一步会很棒但是一个简洁的教程或解释也会很有用。 简而言之,我需要知道如何将这两个表挂钩,并将OldDB.Call.Status
中的值映射到OldDB
中的外键,并将该值存储在NewDB
中。
答案 0 :(得分:1)
我会使用查找转换来满足此要求。
在Lookup定义中,Connection将指向您的NewDB.CallStatus(编写SELECT是最佳实践,而不仅仅是选择表 - 它会缓存元数据)。在“列”窗格上,将“状态”映射到“状态”,然后选择“StatusID”作为“查找”列。
现在,您的数据流将在下游传输添加的列,您可以将其传递(通常使用OLE DB目标)。
Lookup的默认模式是Full Cache,与Sort&amp; amp;相比,它将更快,使用更少的内存。合并解决方案。