tsql如何拆分xml并将其作为行插入

tsql如何拆分xml并将其作为行插入,xml,tsql,Xml,Tsql,这里有一个问题()提问者想将xml变量拆分成行 我有几乎相同的问题,但我将XML存储在一个表中。每行至少存储一个xml节点,有时甚至更多。我想将它们拆分为单独的行,但似乎.nodes('a')需要一个标量变量 这就是我尝试过的: declare @T table (XMLCol xml); insert into @T values ('<a abb="122"> <b></b> </a> <a abb="144"> &l

这里有一个问题()提问者想将xml变量拆分成行

我有几乎相同的问题,但我将XML存储在一个表中。每行至少存储一个xml节点,有时甚至更多。我想将它们拆分为单独的行,但似乎.nodes('a')需要一个标量变量

这就是我尝试过的:

declare @T table (XMLCol xml);

insert into @T values
('<a abb="122">
  <b></b>
 </a>
 <a abb="144">
  <b></b>
 </a>'),
 ('<a abb="222">
  <b></b>
 </a>
 <a abb="244">
  <b></b>
 </a>');

 select a.query('.') from @T.nodes('a') a(a);
你能帮我吗

提前谢谢

试着这样做(如果我正确理解了你的问题):

编辑: 您可以通过如下方式从表变量获取数据:

ID           XML
1            <a abb="122"><b></b></a><a abb="144"><b></b></a>
2            <a abb="222"><b></b></a><a abb="244"><b></b></a>
select tbl.vals
from @T as t
cross apply (select x.items.query('.') from t.XMLCol.nodes('/a') as x(items)) as tbl(vals)

嘿第二个是我想要的,但它只适用于xml变量。我的问题是如何使它在整个表上工作,而不仅仅是在变量上。@Nandor:试试第三个:)
INSERT INTO table2 SELECT * FROM table1
declare @xml xml = N'<a abb="122"><b></b></a><a abb="144"><b></b></a>'
select  @xml.query('/a/*') 
select x.items.query('.') from @xml.nodes('/a/b') as x(items) 
select tbl.vals
from @T as t
cross apply (select x.items.query('.') from t.XMLCol.nodes('/a') as x(items)) as tbl(vals)