我是SSIS的新手,我正在尝试将旧数据库数据转换为新的数据库模式。我已经玩了一段时间,但我无法理解如何在2个或更多目的地来源之间保持完整性。例如,我在旧数据库(建筑物项目)中有一个项目表,其中包含以下信息:
+------------------------+
+ TABLE: Projects +
+------------------------+
+ ProjectID (PK) + (primary key of project)
+ ProjectCode + (unique code of the project)
+ ProjectBuildingName + (name of the building for this project)
+ ProjectCompletionDate + (date when the project has been completed)
+ AddressLine1 + (AddressLine, Postalcode and City of the building)
+ Postalcode +
+ City +
+------------------------+
在我的新数据库设计中,我想将[Projects]的数据分成表:[Projects],[Projectbuildings]和[Addresses]。
在SSIS中,我选择旧的。[Projects]表作为源,并将这些表映射到相应的源。在此之前,我转换数据并进行多播,如下图所示:
在此流程中,我将我想要的数据迁移到我想要的表中,但这些表将不具有FK完整性。例如,我的新设计看起来像这样:
+--------------------------+
+ TABLE: Projects +
+--------------------------+
+ ProjectID (PK) +
+ ProjectCode +
+ ProjectCompletionDate +
+ ProjectBuildingID (FK) +
+--------------------------+
+--------------------------+
+ TABLE: ProjectBuildings +
+--------------------------+
+ ProjectBuildingID (PK) +
+ ProjectBuildingName +
+ AddressID (FK) +
+--------------------------+
+--------------------------+
+ TABLE: Addresses +
+--------------------------+
+ AddressID (PK) +
+ Country +
+ City +
+ Postalcode +
+ AddressLine1 +
+--------------------------+
(P.S。忽略图中的第4列,这将是[Contacts]列。这是一个有限的数据示例,可以帮助我指出我的问题)
当我现在将1映射为1时,我确实在正确的表和列中传输数据,但是我如何确保所有表的关系也以正确的方式相互关联?
我已经看到其他2个stackoverflow帖子或多或少相同的问题,但我无法解决它。我希望有一个更明确的答案。
注意:我正在使用SQL Server 2008数据中心+集成服务与Microsoft Visual Studio 2008.我正在尝试从旧数据库迁移到新数据库,两者都在同一个SQL Server 2008上。
修改 我在How do I split flat file data and load into parent-child tables in database?找到了很好的解释。
我设法将一个表拆分为两个表(一个子表和一个父表),插入父表,然后查找插入的ID,并使用该ID插入子表。当此子项也是第3个表的父项时出现问题。我认为为第二个孩子运行相同的流程将是相同的:查找child1的插入ID的ID,然后在插入child2时使用它。出于某种原因,它并没有真正起作用。
修改 好的,这是真实的例子。我正在尝试将以下列迁移出旧数据库(全部在1个表中):
[OLDDB].Customersurname ----> [People].Surname
[OLDDB].Customerforename ----> [People].Forename
[OLDDB].Customergender ----> [People].bGender
[OLDDB].Customeraddressline ----> [Addresses].AddressLine1
[OLDDB].Customerpostalcode ----> [Addresses].Postalcode
[OLDDB].Customercity ----> [Addresses].City
[OLDDB].Customerphone ----> [AdditionalAddresses].Phone1
[OLDDB].Customeremail ----> [AdditionalAddresses].Email
现在我设法插入[AdditionalAddresses]和[Addresses]及其相应的链接(并将Country和AddressTypes留空)。我的问题是[Contacts]表,它只包含[Address] .AddressID和boolean,它告诉[联系人]是个人还是公司。我认为,如果[People]和[Companies]都将[Address] .AddressID包含为FK,它就可以工作。
所以我到目前为止所做的是:
接下来我会:
然后是最后一部分,用属于那个人的[Address] .AddressID更新[Contacts]表...
答案 0 :(得分:1)
要确切满足您的需求的几个问题:
同时调查的两个选项: