我有一个表将xml内容存储为字符串(这些都是在xml数据类型之前放在一起)。这是一个例子:
<?xml version="1.0" encoding="utf-16"?>
<ArrayOfLibAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<libAddress Address="11" Type="User" />
<libAddress Address="79" Type="User" />
<libAddress Address="18" Type="UserGroup" />
<libAddress Address="19" Type="UserGroup" />
<libAddress Address="5" Type="MailGroup" />
<libAddress Address="7" Type="MailGroup" />
<libAddress Address="someone@somewhere.com" Type="EmailAddress" />
<libAddress Address="someoneelse@somewhere.com" Type="EmailAddress" />
</ArrayOfLibAddress>
我需要的是一个返回以下内容的T-SQL语句:
Address Type
11 User
79 User
18 UserGroup
19 UserGroup
5 MailGroup
7 MailGroup
someone@somewhere.com EmailAddress
someoneelse@somewhere.com EmailAddress
例如,如果将此值加载到变量中:
DECLARE @x xml = '{the xml content above}'
那我怎么把它变成一张桌子?
我找到了一些示例,可以让我为具有与某个值匹配的属性的元素拉出一个值,但是我找不到一个示例来说明如何为所有这些值转换属性值文档中的元素成为表格结果。
答案 0 :(得分:2)
您可以使用nodes
查询xml变量:
SELECT
T.addresses.value('./@Address', 'nvarchar(max)') [Address],
T.addresses.value('./@Type', 'nvarchar(max)') [Type]
FROM
@x.nodes('//libAddress') T(addresses)
有关详细信息,请参阅MSDN上的nodes() Method