如何在SQLServer 2008R2中跨多行查询xml

时间:2012-09-11 23:19:37

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

在表中,我有多行,每行包含基于公共模式的xml。 XML的一个示例可能是:

<Items>
    <Item>Item 1</Item>
    <Item>Item 2</Item>
</Items>

如果表中有多行,所有包含类似xml的行,是否可以在单个结果集中编写一个返回所有行的Item节点中所有值的查询?我们正在使用SQL Server 2008 R2

1 个答案:

答案 0 :(得分:6)

如果您的xml在XML列中定义..

DECLARE @Items AS TABLE 
(
    ItemXml XML
)

-- test data with a couple rows of xml
INSERT INTO @Items(ItemXml)
VALUES ('<Items><Item>Item 1</Item><Item>Item 2</Item></Items>')
      ,('<Items><Item>Item 3</Item><Item>Item 4</Item></Items>')

-- the query
SELECT t.i.value('.','VARCHAR(8000)') AS Item
FROM @Items CROSS APPLY ItemXml.nodes('/Items/Item') t(i)

会给你

Item
------
Item 1
Item 2
Item 3
Item 4

这里的关键是nodes()

  当您想要将xml数据类型实例分解为时,

非常有用   关系数据。它允许您识别将要映射的节点   进入一个新的行。