3

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

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

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

4

1 回答 1

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 数据类型实例分解为关系数据时很有用。它允许您识别将映射到新行的节点。

于 2012-09-12T00:03:16.287 回答