指定在SSIS XML导入期间如何生成主键

时间:2013-09-09 11:46:48

标签: sql-server xml import ssis primary-key

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

orderdetails表

第1行orderdetail列,order_id = 4 第2行orderdetail列,order_id = 4

一切都好,但我不明白如何生成明显的半随机id = 4

如果使用增量密钥,我会得到(假设种子从1开始)

订单表

order_id = 1,其余数据列

orderdetails表

第1行orderdetail列,order_id = 4&lt; - 与先前生成的SSIS相同 第2行orderdetail列,order_id = 4&lt; - 与先前生成的SSIS相同

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

任何指针都将受到高度赞赏。

2 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分: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

希望这可能有用