在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
答案 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