0

这是从这个问题开始的:
Modify XML in SQL server to add a root node

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

所以目前

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

正在变得

table1(ID, col1, col2, col3)

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

目前我还没有从现有表中删除任何东西,只是创建了第二个,我发现了OUTPUT构造,以便我可以同时插入两个表,包括将第一个表的 PK 作为 FK 放入第二个表在 1 插入 - 就像这样;

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)

这一次成功插入两个表依赖于我尚未从 table1 中删除列的事实,**AND* 导致表之间存在 1:1 关系,而我需要的是 table1 只有行对于不同的 col1, col2, col3 , table2 包含更详细的信息

我想知道我是否以正确的方式进行?我将能够在 1 个查询中执行此操作,还是必须将其分解?我在想也许我可以先将xml切碎到table1中,然后再单独切碎到table2中,加入table1以获得插入的FK?以前有人做过这种事吗?

4

1 回答 1

0

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

选项:

  1. 将 XML 分解为一个表变量 SELECT DISTINCT 从该变量到 table1,SELECT 到 table2

  2. 将 XML 切碎两次。

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

于 2009-03-09T19:18:32.690 回答