如何为所有行选择XML字段节点

时间:2011-12-11 20:21:05

标签: sql sql-server xml sql-server-2008 tsql

我有一张这样的表:

YEAR    int,
Fields  XML

我的XML列对所有行都有这种结构,但具有不同的值:

enter image description here

我如何得到这个结果:

YEAR         ID           NAME             LASTNAME
---------------------------------------------------
2011         1000         Nima               Agha
2011         1001         Begha              Begha
2011         1002         Jigha              Jigha
2011         1003         Aba                Aba
2012         1034         AAA                BBB
...

感谢

1 个答案:

答案 0 :(得分:11)

这个怎么样:

 SELECT 
     Year,
     E.P.value('(ID)[1]', 'INT') AS 'ID',
     E.P.value('(Name)[1]', 'VARCHAR(50)') AS 'Name',
     E.P.value('(LastName)[1]', 'VARCHAR(50)') AS 'LastName'
 FROM 
     dbo.YourTable 
 CROSS APPLY
     Fields.nodes('/Employees/Person') AS E(P)

您基本上是从基表中选择Year,然后从<Person>列中将每个Fields节点提取到名为E的“内联XML表”中名为P的单个XML列(您可以选择您喜欢的名称),您再次查询并从中提取单个元素。