问题是我将数据导入到关系表中,其中数据源是 XML 文件 + XSD 架构。 XML 源有多个输出,节点之间的关系由 SSIS 在 order_id 列中创建(生成的主键值不在 XML 中),在订单详细信息中,我们获得外键 order_id。
文件被导入,我们在订单和订单详细信息之间具有正确的引用完整性,但密钥仅在每个文件中是唯一的,因此如果再次导入相同的文件,则 ssis 会生成/使用相同的 id。
如何确保唯一性/控制 id 的生成方式。
我尝试在订单表中使用身份列作为 order_id ,但它不会向下传播到订单详细信息等参考表...
例如,如果我们有
<order some attributes ...>
<orderdetails some attributes ...></orderdetails>
<orderdetails some attributes ...></orderdetails>
</order>
如果我们只是让 ssis 导入行,我们会得到类似的结果:
订单表
order_id = 4 ,其余数据列
订单明细表
第 1 行 orderdetail 列,order_id=4
第 2 行 orderdetail 列,order_id=4
一切正常,但我不明白明显的半随机 id = 4 是如何生成的
如果使用增量密钥我会得到(假设种子从 1 开始)
订单表
order_id = 1 ,其余数据列
订单明细表
row 1 orderdetail columns , order_id=4
我希望外键的详细信息为 1,所以我想我错过了一些中间步骤/设置,以便在导入 XML 数据时保持引用完整性。
任何指示将不胜感激。
我建议您照常导入标头,使用 IDENTITY 生成内部唯一键。您还应该将 SSIS 生成的密钥导入到同一个表中。
现在将详细信息导入到单独的临时表中,再次保留 SSIS 生成的密钥。
现在使用原始标头表从 SSIS 生成的键映射到唯一键。
为此,您可以使用如下内容更新临时表中的空白字段:
UPDATE LineStaging
SET Unique_Key = Header.UniqueKey
FROM Header
WHERE Header.SSISKey = LineStaging.SSISKey
现在您的 Unique_Key 字段包含正确的外键。您可以将这些暂存记录复制到“真实”线路表中:
插入行
从 LineStaging 中选择 *
可能有一种方法可以在 SSIS 中动态执行此操作,但我更喜欢 SQL 方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)