将xml分解为SQL Server中的多个表时的组数据

时间:2009-03-09 15:13:32

标签: sql-server xml grouping shred

这是从这个问题得出的结论:
Modify XML in SQL server to add a root node

除了问题中提出的问题现在已解决之外,我还将现有表拆分为2,其中第二个表是第一个表的子表,外键返回第一个表。

目前正在

table1(ID, col1, col2, col3....coln)

正在变成

table1(ID, col1, col2, col3)

table2(PK, FK_table1, col4, col5, ...coln)

目前我还没有从现有表中删除任何内容,只是创建了第二个,我发现了 OUTPUT 结构,以便我可以一次插入两个表,包括放入第1个表的PK到第2个作为1个插入中的FK - 所以类似的东西;

INSERT INTO table1 col1, col2,...etc...

OUTPUT inserted.ID, col1, col2, ....
INTO table2(FK_table1, col1, col2, .... )

Select  col.value('node1[1]', 'int') col1,
 col.value('node2[1]', 'varchar(50)') col2,
....etc......
FROM @xml.nodes('//Items/Item') doc(col)

这次成功插入两个表 BUT 依赖于我还没有从table1中删除列的事实,** AND *导致表之间的1:1关系,当我需要的是table1只有不同col1,col2,col3的行,table2保存更详细的信息

我想知道我是否正确地采用了这种方式?我是否可以在1个查询中执行此操作,或者我将不得不将其分解?我想也许我可以先将xml切成table1,然后再单独切碎到table2中,加入table1以获取插入的FK?以前有人做过这种事吗?

1 个答案:

答案 0 :(得分:0)

是的,我做的很相似,并根据我需要做的其他工作使用了这两个建议

选项:

  1. 将XML切成一个tabe变量 从那里选择DISTINCT到table1,SELECT到table2

  2. 将XML粉碎两次。

  3. 我倾向于一次性完成昂贵的操作(粉碎XML)。