Sql server 在SQL server中将xml分解到多个表时对数据进行分组

Sql server 在SQL server中将xml分解到多个表时对数据进行分组,sql-server,xml,grouping,shred,Sql Server,Xml,Grouping,Shred,下面是这个问题: 除了在该问题中提出并修复的问题之外,我还将现有表拆分为2,其中第2个表是第一个表的子表,外键返回到第一个表 所以现在 table1(ID, col1, col2, col3....coln) 正在成为 table1(ID, col1, col2, col3) 及 目前,我还没有从现有表中删除任何内容,只是创建了第二个表,我发现了输出结构,因此我可以一次插入到两个表中,包括将第一个表的PK作为FK放入第二个表中,就像插入1中的FK一样 INSERT INTO table1

下面是这个问题:

除了在该问题中提出并修复的问题之外,我还将现有表拆分为2,其中第2个表是第一个表的子表,外键返回到第一个表

所以现在

table1(ID, col1, col2, col3....coln)
正在成为

table1(ID, col1, col2, col3)

目前,我还没有从现有表中删除任何内容,只是创建了第二个表,我发现了输出结构,因此我可以一次插入到两个表中,包括将第一个表的PK作为FK放入第二个表中,就像插入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)
这成功地一次插入到两个表中,但依赖于我还没有从表1中删除列,**和*导致表之间的关系为1:1,而我需要的是表1只包含不同col1、col2、col3的行,而表2包含更详细的信息


我想知道我的做法是否正确?我是能够在一个查询中完成这项工作,还是必须将其分解?我在想,也许我可以先将xml分解到表1中,然后再分别分解到表2中,加入表1以获得插入的FK?以前有人做过类似的事情吗?

是的,我也做过类似的事情,并根据我需要做的其他工作使用了这两种建议

选项:

  • 将XML分解成一个tabe变量 选择不同于表1的选项,选择表2的选项

  • 将XML切碎两次


  • 我倾向于一次完成昂贵的操作(分解XML)。

    谢谢-很好地解释了我的问题,这不是最容易阅读的!我现在已经成功地做到了这一点,正如您所说,在第一个表中使用Select Distinct,然后再次分解到第二个表中,在第一个表中加入以获得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)