表TSQL的xml名称/值

表TSQL的xml名称/值,xml,tsql,Xml,Tsql,我有下表 Id | XML 1 XML1 2 XML2 3 XML3 每个XML都有以下结构: <aaa> <row name="a" value="1" /> <row name="b" value="2" /> <row name="c" value="3" /> </aaa> <aaa> <row name="a" value="3" /> <row name

我有下表

Id | XML
1    XML1
2    XML2
3    XML3
每个XML都有以下结构:

<aaa>
  <row name="a" value="1" />
  <row name="b" value="2" />
  <row name="c" value="3" />
</aaa>

<aaa>
  <row name="a" value="3" />
  <row name="b" value="4" />
  <row name="c" value="5" />
</aaa>

<aaa>
  <row name="a" value="10" />
  <row name="b" value="20" />
  <row name="c" value="30" />
</aaa>
我用TSQL写了一些东西,但我无法从每个xml中获得完整的参数

SELECT [Id], [XML] FROM table


SELECT
[XML].value('(aaa/row//@name)[1]','varchar(20)') AS 'NAME',
[XML].value('(aaa/row//@value)[1]','varchar(20)') AS 'VALUE'
 FROM table

下面是一个XML all-in-one变量的示例,以及选择字段的结果代码

DECLARE @xmlIN XML = '<TableData>
    <aaa>
      <row name="a" value="1" />
      <row name="b" value="2" />
      <row name="c" value="3" />
</aaa>
<aaa>
  <row name="a" value="3" />
  <row name="b" value="4" />
  <row name="c" value="5" />
</aaa>
<aaa>
  <row name="a" value="10" />
  <row name="b" value="20" />
  <row name="c" value="30" />
</aaa>
</TableData>'

SELECT t.col.value('@name', 'VARCHAR(25)') [name],  
t.col.value('@value',  'VARCHAR(25)') [Value]
FROM    @xmlIn.nodes('//TableData/aaa/row') AS t (col)
DECLARE@xmlIN-XML='1〕
'
选择t.col.value(“@name”,“VARCHAR(25)”)[name],
t、 col.value('@value','VARCHAR(25)')[value]
从@xmlIn.nodes('//TableData/aaa/row')作为t(col)
然后,要以您描述的格式获取数据,您必须进行某种透视。

这应该可以:

SELECT
[XML].value('(aaa/row/@value)[1]','varchar(20)') AS a,
[XML].value('(aaa/row/@value)[2]','varchar(20)') AS b,
[XML].value('(aaa/row/@value)[3]','varchar(20)') AS c
FROM table

元素数是否为常量,例如,如示例中的始终为3?好的,请检查我发布的答案并让我知道。其工作正常,但如何将其用于表中的行创建表名称(Id int,XML,);插入到表_名称值(1,,)插入到表_名称值(2,,)插入到表_名称值(3,,),而不将每一行写入变量?–
SELECT
[XML].value('(aaa/row/@value)[1]','varchar(20)') AS a,
[XML].value('(aaa/row/@value)[2]','varchar(20)') AS b,
[XML].value('(aaa/row/@value)[3]','varchar(20)') AS c
FROM table