需要将SQL Server xml blob转换为表进行操作

时间:2015-04-28 23:13:49

标签: sql-server xml tsql

我有一个表将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}'

那我怎么把它变成一张桌子?

我找到了一些示例,可以让我为具有与某个值匹配的属性的元素拉出一个值,但是我找不到一个示例来说明如何为所有这些值转换属性值文档中的元素成为表格结果。

1 个答案:

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