buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

sqlserver2005提供的xml数据类型操作xml串

DECLARE @data XML
SET @data='<bookstore>
<book category="WEB" price="50" year="2009"><title lang="en">asp.net</title><author>董浩</author><author>钱多多</author></book>
<book category="计算机" price="37" year="2012"><title lang="chs">java入门</title><author>蔡得志</author></book>
</bookstore>'
SELECT @data
--获取category="WEB"且 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)') AS 'titleOf1stBook'

--========根据属性名称查询--========
--获取第一个book节点的名为category的属性值
DECLARE @attr VARCHAR(20)
SELECT @attr = 'category'
select @data.value('(/bookstore/book/@*[local-name()=sql:variable("@attr")])[1]','VARCHAR(20)')
/*output:
asp.net
*/--========映射为表结构查询--========

--获取每本书的第一个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
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
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:
*/

 

更多可参见:http://www.cnblogs.com/FlyingPig-Nannan/articles/1968917.html

posted on 2012-06-03 01:35  buguge  阅读(196)  评论(0编辑  收藏  举报