2

问题是我将数据导入到关系表中,其中数据源是 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 ,其余数据列

订单明细表

第 1 行 orderdetail 列,order_id=4 <--与之前 SSIS 生成的相同 第 2 行 orderdetail 列,order_id=4 <--与之前 SSIS 生成的相同

我希望外键的 id 为 1 的详细信息,所以我想我错过了一些中间步骤/设置,以便在导入 XML 数据时保持引用完整性。

任何指针将不胜感激。

4

2 回答 2

0

请参阅下面的链接,这可能会帮助您了解如何将键添加到标签

http://msdn.microsoft.com/en-us/library/d8wa0tw7(v=vs.71).aspx

http://msdn.microsoft.com/en-us/library/961cwet7(v=vs.71).aspx

希望这可能有用

于 2013-09-18T12:09:45.280 回答
0

我建议您像往常一样导入标头,使用 IDENTITY 生成内部唯一键。您还应该将 SSIS 生成的密钥导入到同一个表中。

现在将详细信息导入单独的临时表,再次保留 SSIS 生成的密钥。

现在使用原始头表从 SSIS 生成的键映射到唯一键。

为此,您可以使用以下内容更新临时表中的空白字段:

UPDATE LineStaging
SET Unique_Key = Header.UniqueKey
FROM Header 
WHERE Header.SSISKey = LineStaging.SSISKey

现在您的 Unique_Key 字段包含正确的外键。您可以将这些暂存记录复制到您的“真实”行表中:

INSERT INTO Line SELECT * FROM LineStaging

在 SSIS 中可能有一种方法可以即时执行此操作,但我更喜欢 SQL 方法。

于 2013-09-11T05:03:02.147 回答