在源表中,有两列,如下图所示:
然后对于目标表,它应该是这样的:
(“DimLocationKey”是自动生成的代理键)
如何在 SSIS 中实现自引用效果?我尝试了以下方法,但它不起作用,因为查找中没有匹配项。
在源表中,有两列,如下图所示:
然后对于目标表,它应该是这样的:
(“DimLocationKey”是自动生成的代理键)
如何在 SSIS 中实现自引用效果?我尝试了以下方法,但它不起作用,因为查找中没有匹配项。
如果该列可以为空,那么您可以加载 location_ID 的唯一值,然后让辅助进程返回并负责更新现有的并可能添加新的。
1 NULL A NULL
2 NULL B NULL
3 NULL C NULL
4 NULL D NULL
我想如果它不可为空,那么您可以预先计算数据流中的这些 id 并将当前行和父级分配给自己。作为开发人员,我可能会因此而讨厌你 ;)
此时,问题是表中应该有 8 行还是 4 行(无论您的源数据表明什么)。这成为业务用户的一个问题,适当地“降低了”。我已经在我的等级问题中看到了这两个答案——“总统向谁报告?” 在某个地方,总统没有向任何人报告,这意味着费用申请被自动批准。另一个地方有 CEO 自己报告,这意味着他们的费用报告仍然必须由他们自己批准。我想这是为了确保他们有行政责任,因为没有什么是自动的。
如果答案是 8 行,那么您的数据流看起来是正确的。如果它是 4,那么您将使用现有数据流,但改为更新行。如果它是一小组行,数百行,那么您可以使用 OLEDB 命令并编写您的更新语句。只需意识到它将为命中组件的每一行发出一个 UPDATE 语句。这会使您的处理陷入停顿,因为它的效率非常低。
更有效的更新途径是使用 OLE DB 目标,并且在数据流完成后,让执行 SQL 任务发出基于集合的 UPDATE 语句。请参阅 Andy Leonard 的集成服务阶梯系列,了解如何执行此操作的编写良好的示例。
如果它不可为空并且不允许引用自身的节点,那么您的数据模型似乎没有准确描述