SQL操作XML

/* sql xml 入门:

1、xml:能认识元素、属性和值

2、xpath: 寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁) 语法格式,这些语法可以组合为条件:"."表示自己,".."表示父亲,"/"表示儿子,"//"表示后代, "name"表示按名字查找,"@name"表示按属性查找  "集合[条件]" 表示根据条件取集合的子集,条件可以是数值:数字,last(),last()-数字 等布尔值:position()<数字,@name=‘条件‘,name=‘条件条件是布尔值的时候可以合并计算:and or

3、xquery:    基于xpath标的准查询语言,sqlserver xquery包含如下函数exist(xpath条件):返回布尔值表示节点是否存在 query(xpath条件):返回由符合条件的节点组成的新的xml文档value(xpath条件,数据类型):返回指定的标量值,xpath条件结果必须唯一 nodes(xpath条件): 返回由符合条件的节点组成的一行一列的结果表 */

declare @data xml

set @data=‘ <bookstore> <book category="COOKING">   <title lang="en">Everyday Italian</title>   <author>Giada De Laurentiis</author>   <year>2005</year>   <price>30.00</price> </book> <book category="CHILDREN">   <title lang="jp">Harry Potter</title>   <author>J K. Rowling</author>   <year>2005</year>   <price>29.99</price> </book> <book category="WEB">   <title lang="en">XQuery Kick Start</title>   <author>James McGovern</author>   <author>Per Bothner</author>   <author>Kurt Cagle</author>   <author>James Linn</author>   <author>Vaidyanathan Nagarajan</author>   <year>2003</year>   <price>49.99</price> </book> <book category="WEB">   <title lang="cn">Learning XML</title>   <author>Erik T. Ray</author>   <year>2003</year>   <price>39.95</price> </book> </bookstore> ‘ select @data.query(‘//book/title[@lang="en"]‘)

select @data.query(‘//book[title/@lang="en"]‘) --测试语句,如果不理解语法请参考上面的xpath规则和xquery函数说明

--1、文档 select @data

--2、任意级别是否存在price节点 select @data.exist(‘//price‘)

--3、获取所有book节点 select @data.query(‘//book‘)

--4、获取所有包含lang属性的节点 select @data.query(‘//*[@lang]‘)

--5、获取第一个book节点 select @data.query(‘//book[1]‘)

--6、获取前两个book节点 select @data.query(‘//book[position()<=2]‘)

--7、获取最后一个book节点 select @data.query(‘//book[last()]‘)

--8、获取price>35的所有book节点 select @data.query(‘//book[price>35]‘)

--9、获取category="WEB"的所有book节点(及个数) select @data.query(‘//book[@category="WEB"]‘) select @data.value(‘count(//book[@category="WEB"])‘,‘int‘)

--10、获取title的lang="en"的所有book节点 select @data.query(‘//book[title/@lang="en"]‘)

--11、获取title的lang="en"的所有title节点 select @data.query(‘//book/title[@lang="en"]‘)

--12、获取title的lang="en"且 price>35的所有book节点 select @data.query(‘//book[./title[@lang="en"] or price>35 ]‘)

--13、获取title的lang="en"且 price>35的第一book的(第一个)title select @data.query(‘//book[./title[@lang="en"] and price>35 ]‘).value(‘(book/title)[1]‘,‘varchar(max)‘)

--14、等价于12 select @data.value(‘(//book[./title[@lang="en"] and price>35 ]/title)[1]‘,‘varchar(max)‘)

--15、获取title的lang="en"且 price>35的第一book的(第一个)title的lang属性 select @data.value(‘((//book[@category="WEB" and price>35 ]/title)[1]/@lang)[1]‘,‘varchar(max)‘)

--16、获取第一本书的title select Tab.Col.value(‘(book/title)[1]‘,‘varchar(max)‘) as title     from @data.nodes(‘bookstore‘)as Tab(Col)

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

--18、获取所有book的所有信息 select  T.C.value(‘title[1]‘,‘varchar(max)‘) as title,  T.C.value(‘year[1]‘,‘int‘) as year,  T.C.value(‘title[1]‘,‘varchar(max)‘)as title,  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)

--19、获取不是日语(lang!="jp")且价格大于35的书的所有信息 select  T.C.value(‘title[1]‘,‘varchar(max)‘) as title,  T.C.value(‘year[1]‘,‘int‘) as year,  T.C.value(‘title[1]‘,‘varchar(max)‘)as title,  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)

时间: 2024-10-13 09:07:55

SQL操作XML的相关文章

C#和SQL操作Xml

#region DataTableToXml        public static string DataTableToXml(System.Data.DataTable Dt)        {            StringBuilder sbHtml = new StringBuilder();            if (Dt.Rows.Count > 0)             {                sbHtml.Append("<Root>&

(轉載)sql server xml字段的操作

原文轉自:http://blog.csdn.net/hliq5399/article/details/8315373 今天用到sql server 的xml字段,首先这个项目中的xml字段都存为了ntext字段,所以第一个操作 ntext 转化为 xml 以下摘自 http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/09/18/sql2005-nvarchar-to-xml.aspx XmlString是一個NText欄位,裡面放

(转)SQL对Xml字段的操作

T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XM

SQL对Xml字段的操作

原文:SQL对Xml字段的操作 T-Sql操作Xml数据 一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中.

SqlServer简单的操作XML以及SQl的 try catch等统一格式

1:SqlServer简单的操作XML: ALTER PROCEDURE [dbo].[SP_CRM_FranchiseeRecharge_Money] @Create_By VARCHAR(50), @xmlStr1 NVARCHAR(MAX) -写在这里面的为 传入的参数 AS BEGIN as begin后面的为自定义的变量 SET NOCOUNT ON; DECLARE @xml XML = @xmlStr1; sqlserver操作XML T-SQL提供了以下几个针对XML类型的查询函

Sql Server xml 类型字段的增删改查

1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需要写sql更新或插入. DECLARE @xml XML SET @xml=' <MyHobby> <MyCode>1</MyCode> <MyName>爬山</MyName> </MyHobby> <MyHobby> <

SQL读取XML字段

最近要对一套老系统进行数据迁移,这样苦逼的工作就来了,需要新旧两套系统数据表字段进行对比,最终将老系统的数据迁移到新系统中来. 尽管数据结构不一致.部分字段不一致,也只是恶心一点麻烦一点,勉勉强强速度慢点,还是可以整理出来,并编写好迁移的SQL语句. 一步一步走了好几步了,出来个更恶心的怪物了!强大的XML数据字段 本来应该是单独存到一个子表的信息,在老系统中硬生生的存到了一个XML字段中 <root> <people id=1 name=tom/> <people id=2

SQL FOR XML

原文:SQL FOR XML 摘要:sql中的for xml语法为表转化为xml提供了很好的支持,当然使用同样的程序语言也能够达到同样的效果,但是有了for xml将使得这一切更加的方便. 主要内容: Select 的查询结果会作为行集返回,但是你同样可以在sql中指定for xml子句使得查询作为xml来检索.在for xml子句中,可以指定以下模式之一:RAW .AUTO.EXPLICIT和PATH. RAW模式返回行为元素,每一列的值作为元素的属性:AUTO模式返回表名为节点的元素,每一列

黄聪:C#操作xml SelectNodes,SelectSingleNode通过 xPath 定位class包含Contains的DIV

一. SelectNodes,SelectSingleNode总是返回NULL 下面以一个简单的xml为例: <?xml version="1.0"?> <message xmlns="http://www.mydomain.com/MyDataFeed" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.mydomain.