SQL SERVER XML学习总结(一)

2014-11-24 10:20:45 · 作者: · 浏览: 0
SQL SERVER XML学习总结
最新的项目任务要做一个数据同步的功能,这些天都在做技术准备,主要是用到了微软的Service Broker技术,在熟悉使用该技术的同时,又用到了Sql server xml的一些知识,这两天在家,把这个sql xml的一些知识给学习了一下,下边是一些学习过程中的总结,希望能给大家带来一些帮助。
测试用的数据
use TestDB

go

create Table TbFroXML(id uniqueidentifier primary key,name nvarchar(50),[type] nvarchar(50))

go



insert into TbFroXML values(NEWID(),'BBen','MG')

insert into TbFroXML values(NEWID(),'BB','MG')

insert into TbFroXML values(NEWID(),'Olive','MG')

insert into TbFroXML values(NEWID(),'今天','NMG')

insert into TbFroXML values(NEWID(),'明天','NMG')

insert into TbFroXML values(NEWID(),'未来','NMG')

insert into TbFroXML(id,name) values(newid(),'笨笨')

go

1.    For Xml Path


--无名称列,针对行集合中的每一行生成一个对应的row元素,格式:1

select 1 for xml path



--生产格式 XXX

select name from TbFroXML for xml path



--去掉name标签,只剩下row标签,格式:BBenBB>Olive....

select name+'' from TbFroXML for xml path



--只生成要查询的列的数据,去掉row元素,格式:BB未来明天今天BBenOlive

select name+'' from TbFroXML for xml path('')



--生成格式:BBen

select id as '@id',name from TbFroXML for xml path



--以NMG标记作为行标记,格式:BBen未来

select name from TbFroXML for xml path('NMG')



--以NMG标记作为行标记,以Mg标记作为内标记,格式:BB未来

select name as MG from TbFroXML  for xml path('NMG')



--生成格式:BB

select name as 'BBen/Olive' from TbFroXML for xml path



--生成格式:BB>未来

select id as '@id',name as '*' from TbFroXML for xml path



--被指定为列名的路径为data(),则在生成的XML 中,该值将被作为一个原子值来处理,

--生成格式:BBMG

select id as '@id',name as '@name',name,[TYPE] as 'data()' from TbFroXML for xml path

--默认情况下,列中的Null 值映射为“缺少相应的属性、节点或元素,使用ELEMENTS 指令请求以元素为中心的XML 并指定XSINIL 来请求为NULL 值添加元素,格式:
笨笨
select id as '@id',null as 'xx/null',name as 'xx/name',[TYPE] as 'xx/type' from TbFroXML for xml path ,elements xsinil --ROOT('oo'),--指定向产生的XML 中添加单个顶级元素 select id as '@id' ,name from TbFroXML for xml path,root('oo') 2. For Xml Row/Auto模式 --auto模式,格式: select * from TbFroXML for xml auto --elements选项,将每列值都映射为〈row>元素的子元素,格式:41D6A175-C079-4861-9C75-2EE48A62C3BCBBMG select * from TbFroXML for xml auto,elements --row 模式:格式:7B890E0B-C470-4E93-89A4-3041B70E8DF3笨笨 select * from TbFroXML for xml raw,elements --elements选项,值为XSINIL 时,将结果集中的值为null 的列映射为xsi:nil=true属性的元素,格式:41D6A175-C079-4861-9C75-2EE48A62C3BCBBMG select * from TbFroXML for xml raw, elements xsinil --xmldata:结果请求架构 select * from TbFroXML for xml raw,xmldata --xmlschema:结果请求架构 select * from TbFroXML for xml raw,xmlschema 3. For XML Explicit select 1 as Tag, NULL as Parent, 3 as [node!1] --[node!1]代表的是根节点,node为节点名,代表节点层次结构的节点级别 for xml explicit select 1 as Tag, null as Parent, Null as [root!1], null as [node!2!id!element]--[node!2!id!ELEMENT]node 代表的是节点名称;2代表的节点层次;id 表示的是元素名称;.ELEMENT 选项表示向 元素添加了 元素子级,而不是添加属性。 union all select 2 as Tag, 1 as Parent, null, id from TbFroXML where id!=null for xml explicit 4. XPath XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。 4.1 选取节点 下面列出了最有用的路径表达式: 表达式 描述 nodename 选取此节点的所有子节点。 / 从根节点选取。 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 . 选取当前节点。 .. 选取当前节点的父节点。 @ 选取属性。 4