xQuery和T-SQL来提取数据

时间:2010-11-12 15:20:39

标签: sql xml tsql

在SQL 2005中将一些基本XML作为XML数据类型。一个记录/行看起来像这样

<doc>
  <level1>

    <level2>
      <name>James</name>
      <age>12</age>
    </level2>

    <level2>
      <name>John</name>
      <age>23</age>
    </level2>

  </level1>
</doc>

当我执行一些基本的T_SQL

SELECT TOP 1 
DocumentXML.query('data(//doc/name)'),
DocumentXML.query('data(//doc/age)')
FROM [DBNAME].[dbo].[TBLNAME]

我得到了

ID  |  Name     | Age
----------------------
1   | JamesJohn | 1223

如何重写T-SQL,使其显示为

ID  |  Name  |  Age
--------------------
1   |  James |  12
2   |  John  |  23

1 个答案:

答案 0 :(得分:5)

你的榜样对我不起作用;第二个级别2以</level2>打开。 //doc/name不存在;可能是//doc/level1/level2/name

以下是如何从XML检索行集的示例:

declare @t table (id int identity, doc xml)
insert @t (doc) values (
    '<doc>
      <level1>

        <level2>
          <name>James</name>
          <age>12</age>
        </level2>

        <level2>
          <name>John</name>
          <age>23</age>
        </level2>

      </level1>
    </doc>')

SELECT  x.a.value('(name)[1]','varchar(50)') as col1
,       x.a.value('(age)[1]','varchar(50)') as col2
FROM    @t t
cross apply
        t.doc.nodes('//level2') x(a)

打印:

col1     col2
James    12
John     23