在SQL Server 2012中解析XML数据

Max*_*ion 2 xml sql-server xml-parsing sql-server-2012

我在SQL Server数据库中有一个表tblUserData,它有两列:

tblUSerData(ID BIGINT, UserData XML)
Run Code Online (Sandbox Code Playgroud)

XML结构如下:

<user>
   <name>
      Akshay
   </name>
   <age>
      23
   </age>
</user>
Run Code Online (Sandbox Code Playgroud)

我想编写一个存储过程,以便读取表并返回超过20年的用户的记录.我很困惑如何以有效的方式解析数据表.提前致谢.

Mik*_*son 6

您的查询可以使用exist()方法(xml数据类型)编写

select ID
from tblUserData
where UserData.exist('/user[age > 20]') = 1
Run Code Online (Sandbox Code Playgroud)

从SQL Server 2012 SP1,您可以使用选择性XML索引(SXI),支持上述查询的索引将如下所示.

create selective xml index sxi_UserData on tblUserData(UserData)
for (
    u = '/user' as xquery 'node()' singleton,
    a = '/user/age' as xquery 'xs:double' singleton
    )
Run Code Online (Sandbox Code Playgroud)

要使用选择性XML索引,必须使用sp_db_selective_xml_index(Transact-SQL)启用它

有关更多信息,您可以查看Bob Beauchemin撰写的一些博客文章.