SQLServer XQuery 入门

XQuery 是一种可以查询结构化或半结构化 XML 数据的语言

若要查询 xml 类型的变量或列中存储的 XML 实例,
可以使用 xml 数据类型方法

 

下表列出了 xml 数据类型方法

query() 方法(xml 数据类型)  此方法用于对 XML 实例进行查询
 
value() 方法(xml 数据类型)  此方法用于从 XML 实例检索 SQL 类型的值
 
exist() 方法(xml 数据类型)     此方法用于确定查询是否返回非空结果
 
modify() 方法(xml 数据类型) 此方法用于指定 XML DML 语句以执行更新
 
nodes() 方法(xml 数据类型)  此方法用于将 XML 拆分成多行

 

 

XQuery 是一种可以查询结构化或半结构化 XML 数据的语言

若要查询 xml 类型的变量或列中存储的 XML 实例,
可以使用 xml 数据类型方法

例如:
声明一个 xml 类型的变量,
然后使用 xml 数据类型的 query() 方法来查询此变量

DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SELECT @x.query('/book/bookAuthor')

将得到
<bookAuthor>张三</bookAuthor>

-------
下表列出了 xml 数据类型方法

query() 方法(xml 数据类型)  此方法用于对 XML 实例进行查询
 
value() 方法(xml 数据类型)  此方法用于从 XML 实例检索 SQL 类型的值
 
exist() 方法(xml 数据类型)     此方法用于确定查询是否返回非空结果
 
modify() 方法(xml 数据类型) 此方法用于指定 XML DML 语句以执行更新
 
nodes() 方法(xml 数据类型)  此方法用于将 XML 拆分成多行
                                                         以将 XML 文档的组成部分传播到行集中

=============== value() ===
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SELECT @x.value('(/book/bookAuthor)[1]','char(10)')
结果为:
张三

=============== exist()==
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SELECT @x.exist('/book/bookAuthor')
结果为:
1

=============== modify()====
----replace value of
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SET @x.modify('replace value of (/book/bookAuthor/text())[1] with "李四"')
SELECT @x
结果为:
<book><bookAuthor>李四</bookAuthor></book>

----insert
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SET @x.modify('insert <book><bookAuthor>李四</bookAuthor></book>
                            into  (.) ')
SELECT @x
结果为:
<book><bookAuthor>张三</bookAuthor></book>
<book><bookAuthor>李四</bookAuthor></book>

----delete
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor><price>20</price></book>'
SET @x.modify('delete (/book/price) ')
SELECT @x
结果为:
<book><bookAuthor>张三</bookAuthor></book>

============= nodes() ====

DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SELECT tableTmp1.columnTmp1.query('./text()') AS '作者'
FROM @x.nodes('/book/bookAuthor') tableTmp1(columnTmp1)
结果为:
作者
张三


 

 

if exists (select * from sysobjects where name='StudentXML')
drop table StudentXML

create table StudentXML
(
    ID 
int,
    stuInfo xml
)
go


insert into StudentXML values (1,'<stuInfo><name>张三</name><age>18</age>
<sex>男</sex><specialty>计算机应用</specialty>
</stuInfo>
')

select * from StudentXML

declare @stu xml
select @stu=stuInfo from StudentXML where id=1
select @stu.query('stuInfo/name'as Name,@stu.query('stuInfo/sex'as sex,
@stu.query('stuInfo/age'as age,@stu.query('stuInfo/specialty'as specialty





--query() 方法 此方法用于对 XML 实例进行查询
declare @x xml
set @x='<book><bookAuthor>张三</bookAuthor></book>'
select @x.query('/book/bookAuthor')

--value() 方法  此方法用于从 XML 实例检索 SQL 类型的值
declare @x xml
set @x='<book><bookAuthor>张三</bookAuthor></book>
<book><bookAuthor>李四</bookAuthor></book>
'
select @x.value('(/book/bookAuthor)[1]','char(10)'as 作者

--exist() 方法 此方法用于查询节点的存在性,返回1存在,0不存在
declare @x xml
set @x='<book><bookAuthor>张三</bookAuthor></book>
<book><bookAuthor>李四</bookAuthor></book>
'
select @x.exist('/book/bookAuthor')

--modify()
declare @x xml
set @x='<book><bookAuthor>张三</bookAuthor></book>'
set @x.modify('replace value of(/book/bookAuthor/text())[1] with "李四"')
select @x

--insert()
declare @x xml
set @x='<book><bookAuthor>张三</bookAuthor></book>'
set @x.modify('insert <book><bookAuthor>李四</bookAuthor></book> into (.)')
select @x

declare @x xml
set @x='<book><bookAuthor>张三</bookAuthor></book><book>
<bookAuthor>李四</bookAuthor></book>
'
set @x.modify('insert attribute type{"A"} into (/book)[2] ')
select @x

--delete()
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor><price>20</price></book>'
set @x.modify('delete(/book/price)')
select @x

--nodes()
DECLARE @x xml
SET @x = '<book><bookAuthor>张三</bookAuthor></book>'
SELECT tableTmp1.columnTmp1.query('./text()'AS '作者' 
FROM @x.nodes('/book/bookAuthor') tableTmp1(columnTmp1)

 

posted @ 2011-03-04 21:02  唔愛吃蘋果  阅读(940)  评论(0编辑  收藏  举报