ssis数据迁移 - 使用新代理键的主详细记录

时间:2011-08-24 22:11:24

标签: ssis

最后到达我项目的数据迁移部分,现在尝试将数据从MySQL移动到SQL Server。

SQL Server具有新架构(映射并不总是一对一)。

我正在尝试使用SSIS进行转换,我今天早上开始学习。

我们在MySQL中有客户和客户位置表,在SQL Server中有等效表。在SQL服务器中,我的所有表现在都有代理键列(GUID),我在脚本组件中创建了相同的内容。

另请注意,我在当前的mysql表中确实有一个主键。

我正在寻找的是如何使用新创建的guid作为父键将子记录添加到客户位置表。

我看到SSIS有Foreach循环容器,这在这里有用。

如果不是我能想到的另一种可能性是在主数据流任务上将主数据发送到目标组件[表]之前创建两个数据流任务和[某种方式],添加一个带有新创建的GUID的变量,另一个带有旧的PrimaryID,将用于为子记录创建DataTask Flow的源。

可能只是简单,这也可以在master完成datatask后完成,然后child的datatask读取这个master数据并将子记录从MySQL插入到SQL Server表中。这可能意味着我必须将所有父表记录加载回内存。

我知道这太令人困惑了,主要是因为我很困惑:-(,请耐心等待,如果你想了解更多信息,请告诉我。

我通过谷歌搜索找到了可能的链接,但没有一个真正解释(或者我无法理解)该过程是如何进行的。

请告知

的问候,

**编辑1 **

在进一步搜索和优化关键词之后,我在SO中找到了此链接,并通过它查看是否可以在我的场景中使用

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

1 个答案:

答案 0 :(得分:0)

好的,这就是我要做的。将我的sql数据放入sql server中设置了标识列的临时表,以及最终为空的GUID的额外列。现在您的记录有一个主键。

接下来是偷偷摸摸的伎俩。选择一个必填字段(我们使用last_name)而不是真实数据插入该值来形成登台表中的id字段。现在你有一个记录,其中包含guid和id。通过在ID和您选择的必填字段上与其联接来更新登台表中的guid字段。现在用真实数据更新last_name字段。

要避免偷偷摸摸的技巧,如果这只是一次性上传,请在包含登台表ID的表中添加一列。您可以再次使用它来获取插入相关表的guid。完成后,删除额外的列。

您知道使用GUID会涉及性能问题吗?确保不要将它们作为聚簇索引(除非您指定不同,否则它们将默认为PK)并使用newsequentialid()填充它们。你为什么使用GUID?如果身份可行,通常最好使用它。