您的位置:首页 > 数据库

XML类型的基本查询使用

2015-10-29 10:47 232 查看

创建表:

create table DevRec(DevID varchar(10),XMLData xml)

插入数据:

insert into DevRec(DevID,XMLData)

select '轴承D','<天气><温度>53</温度><压力>12</压力><流量>3</流量></天气>'

union

select '轴承E','<天气><温度>53</温度><压力>12</压力><流量>7</流量></天气>'

union

select '轴承F','<天气><温度>51</温度><压力>10</压力><流量>5</流量></天气>'

 1、query方法:

query方法可用于查询指定元素的XML文档表示。

SELECT XMLData.query('压力')
FROM DevRec

2、value方法:

value方法为开发人员提供了直接访问XML文档中元素或属性值的途径。利用该方法,可以在复杂的XML文档中直接获取指定元素或属性的值(即直接获取XML文档中某节点的值)value方法将直接返回一个标量值。value方法的语法如下所示:
value(query_express, SQLType)
其中query_express为欲查询的XML文档节点或节点属性的表达式。

select Devid,XMLData.value('/温度[1]','varchar(5)') as 温度,
 XMLData.value('/压力[1]','varchar(5)') as 压力,
 XMLData.value('/流量[1]','varchar(5)') as 流量
from DevRec
where XMLData.value('/温度[1]','varchar(5)') = '53'
and XMLData.value('/压力[1]','varchar(5)') = '12'


3、nodes方法:

采用XML数据类型的nodes方法可以轻松地将一个XML数据类型的实例(例如,一个XML变量或字段)转换为一组相互联系的数据,即数据集。换言之,使用node()方法可以将XML中的某组元素转换为一组数据集中的记录。nodes方法使用语法如下所示:

Nodes (XQuery) AS Table(Column)

从其语法形式上可以很容易地看出,Nodes方法可以将一个XML文档转换为表Table中的相应列(字段)。

DECLARE @data AS XML
SELECT @data = XMLData FROM dbo.DevRec
WHERE DevID = '轴承E'

SELECT XMLData.value('(/天气/温度)[1]','Float') 温度
FROM @data.nodes('/天气/温度')
AS tempdb(XMLData)


4、exist方法:

显然,exist方法是一个用于判断指定XML型结果集中是否存在指定节点的方法。该方法返回的结果包括两种值,即1(当XML型结果集中至少包含一个查询节点时)或0(当XML型查询集中没有包含指定节点时)。

该方法的使用语法如下所示:

exist(‘XQeuryExpression’)

其中XQeuryExpression代表指定的XML型查询语句,该查询语句将生成一组XML型结果集。

SELECT DevID,
  XMLData.exist('/天气/温度') AS 是否存在温度节点,
  XMLData.exist('/天气/压力') AS 是否存在压力节点,
  XMLData.exist('/温度/压力') AS 温度节点下是否存在压力节点
FROM dbo.DevRec
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql server XML 查询