如何构建自引用表

时间:2012-08-06 19:30:41

标签: ssis logic self-reference

在源表中,有两列如下快照所示:

enter image description here

然后对于目标表,它应该是这样的:

enter image description here

“DimLocationKey”是自动生成的代理键

如何在SSIS中实现自我引用效果?我尝试了以下方法,但它不起作用,因为在查找中没有匹配。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果列可以为空,那么您可以加载location_ID的唯一值,然后让一个辅助进程返回并负责更新现有的并可能添加新的。

通过1

1 NULL A NULL
2 NULL B NULL 
3 NULL C NULL
4 NULL D NULL

我认为如果它不可为空,那么您可以在数据流中预先计算这些ID并将当前行和父项分配给它们自己。作为开发人员,我可能会讨厌你;)

通过2

此时,问题是表中是否应该有8行或4(无论你的源数据是什么)。对于商业用户来说,这成了一个问题,恰如其分地“愚蠢”。我在层次结构问题中看到了两个答案 - “总统向谁汇报?”在一个地方,总统向任何人报告,这意味着费用请求被自动批准。首席执行官向自己报告了一个不同的地方,这意味着他们的费用报告仍然需要自己批准。我想这是为了确保他们有执行责任,因为没有什么是自动化的。

如果答案是8行,那么您的数据流看起来是正确的。如果是4,那么您将使用现有数据流,而是更新行。如果它是一小组行,数百个,那么您可以使用OLEDB命令并编写更新语句。只要意识到它将为每个命中组件的行发出UPDATE语句。这可能会使您的处理陷入停滞状态,因为它非常低效。

更有效的更新路径是使用OLE DB目标,在数据流完成后,让Execute SQL任务发出基于集合的UPDATE语句。请参阅Andy Leonard的Stairway to Integration Services系列文章,了解如何执行此操作的详细示例。

如果它不可为空并且不允许节点引用自身,那么您的数据模型似乎无法准确描述