您的位置:首页 > 数据库

SQL Server 2005 XML 操作总结(六)属性操作——查询操作

2011-03-07 11:07 603 查看
========一般查询=========
--获得第一个book节点的category属性值
select @data.value('(/bookstore/book/@category)[1]', 'nvarchar(max)')
/*output:
COOKING
*/
--获取title的lang="en"且 price>35的第一book的(第一个)title的lang属性
select @data.value('((//book[@category="WEB" and
price>35 ]/title)[1]/@lang)[1]','varchar(max)')
/*output:
en
*/
--获取第一本书的title
select @data.value('(/bookstore/book[position()=1]/title)[1]','varchar(max)')
/*output:
Everyday Italian
*/
========根据属性名称查询========
--获取第一个book节点的名为category的属性值
DECLARE @att VARCHAR(20)
SELECT @att = 'category'
select @data.value('(/bookstore/book/@*[local-name()=sql:variable("@att")])[1]','VARCHAR(20)')
/*output:
COOKING
*/========映射为表结构查询========

-获取每本书的第一个author
select Tab.Col.value('author[1]','varchar(max)') as author
from @data.nodes('//book')as Tab(Col)


--获取所有book的所有信息
select
T.C.value('title[1]','varchar(max)') as title,
T.C.value('year[1]','int') as year,
T.C.value('price[1]','float') as price,
T.C.value('author[1]','varchar(max)') as author1,
T.C.value('author[2]','varchar(max)') as author2,
T.C.value('author[3]','varchar(max)') as author3,
T.C.value('author[4]','varchar(max)') as author4
from @data.nodes('//book') as T(C)


--获取不是日语(lang!="jp")且价格大于35的书的所有信息
select
T.C.value('title[1]','varchar(max)') as title,
T.C.value('year[1]','int') as year,
T.C.value('price[1]','float') as price,
T.C.value('author[1]','varchar(max)') as author1,
T.C.value('author[2]','varchar(max)') as author2,
T.C.value('author[3]','varchar(max)') as author3,
T.C.value('author[4]','varchar(max)') as author4
from @data.nodes('//book[./title[@lang!="jp"] and price>35 ]') as T(C)


========模糊查询=========
--查询第一个book节点的第一个属性值
SELECT    @data.value('(/bookstore/book[1]/@*[position()=1])[1]','VARCHAR(20)')
/*output:
COOKING
*/
=========查询属性数量=========
--查询第一个book节点的属性数量
SELECT    @data.value('count(/bookstore/book[1]/@*)','INT')
/*output:
1*/


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: