数据库中操作XML(openXML)
最近公司项目需要在数据库中操作XML,因此系统的学习了一下
一、openxml的格式
OPENXML( idoc int [ in] , XPathnvarchar [ in ] , [ flags byte [ in ] ] ) [ WITH ( SchemaDeclaration | TableName ) ]
参数含义
idoc XML 文档的内部表式形式的文档句柄。 通过调用sp_xml_preparedocument 创建 XML 文档的内部表式形式。
XPath 模式,用来标识要作为行处理的节点。
flags 指示应在 XML 数据和关系行集间使用映射以及应如何填充溢出列。 flags 为可选输入参数,可以是下列值之一(0、1、2、8)
用sql语句准备一段XML
declare @idoc int
declare @doc nvarchar(1000)
set @doc=N'<root>
<customer cid="c1" name="Janine" city="Issaquah">
<order oid="01" data="1/20/1996" amount="3.5"/>
<order oid="02" data="4/30/1997" amount="13.4">Customer was very satisfied</order>
</customer>
<customer cid="c2" name="Ursula" city="Oelde">
<order oid="03" data="7/14/1999" amount="100" note="Wrap it blue white red" >
<Urgency>Impotant</Urgency>
</order>
<order oid="04" date="1/20/1996" amount="10000"/>
</customer>
</root>'
exec sp_xml_preparedocument @idoc out,@doc --declare @temp char(5)
select * from openxml(@idoc,'/root/customer/order',0)
with (oid char(5),--属性
Urgency varchar(50),--元素
commont ntext '@mp:xmltext'
)
Flags为0时 使用“以属性为中心”的映射
Flags为1时 使用“以属性为中心”的映射, 这种情况下,首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射。
Flags为2时 使用“以元素为中心”的映射, 这种情况下,首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射。
Flags为3时 1和2是可以组合使用的,组合的同时1和2的结果都可以显示
若属性名字与元素名字相同,那么在这种情况下则是首先应用“以属性为中心”的映射,然后对所有未处理的列应用“以元素为中心”的映射 即先显示属性再显示元素
Flags为8时 在检索的上下文中,该标志指示不应将已使用的数据复制到溢出属性 @mp:xmltext
如果不指定WITH子句,查询出来的是一个默认的表结构,如下:
当flag=2 却仍然需要显示属性时 可以用如下代码
select * from openxml(@idoc,'/root/customer/order',2)
with (oid1 char(5) '@oid',
oid char(5),--属性
Urgency varchar(50),--元素
commont ntext '@mp:xmltext'
)
显示如下
即只要在with的最后一个参数中,加上XML中想要的标签名称就可以了 这里要注意路径
数据库中操作XML(openXML)的更多相关文章
- VBA中操作XML
OFFICE2007之后使用了OpenXml标准(伟大的改变),定制文本级的Ribbon可以通过修改压缩包内的xml文件来实现. 先学习一下VBA中操作XML的方法 先引用Microsoft XML ...
- VC++中操作XML(MFC、SDK)转
[转]VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++ ...
- C#.Net中操作XML方法一
我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...
- 第12章 在.NET中操作XML
12.1 XML概述 12.1.1 为什么要有XML 12.1.2 XML文档结构 (1)文档声明 <?xml version="1.0"encoding="UTF ...
- [转]VC++中操作XML(MFC、SDK)
XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++里操作XML有两个库可以用:MSXML和Xml ...
- 从数据库中生成XML文件
前台页面<%@ page language="java" contentType="text/html; charset=utf-8" pageEncod ...
- Java读取数据库中的xml格式内容,解析后修改属性节点内容并写回数据库
直接附代码: 1.测试用的xml内容 <mxGraphModel> <root> <mxCell id="-1" /> <mxCell i ...
- C#中操作xml文件(插入节点、修改、删除)
已知有一个xml文件(bookstore.xml)如下: <?xml version="1.0" encoding="gb2312"?> <b ...
- Flex中操作XML的E4X方法
用于处理 XML 的 E4X 方法 Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本 ECMAScript for XML 规范定义了一组用于使用 XML 数据的类 ...
随机推荐
- 自定义标签(TagSupport )
转载:http://zhuhuide2004.iteye.com/blog/555737 这个图太好了,拿下来,标注一下:
- qt数据库多线程问题的解决(QSqlDatabase只能在创建它的线程中使用)
Qt数据库由QSqlDatabase::addDatabase()生成的QSqlDatabase只能在创建它的线程中使用, 在多线程中共用连接或者在另外一个线程中创建query都是不支持的几乎国内没有 ...
- 宣布在日本地区正式发布 Windows Azure
昨天,我与 Microsoft 日本的集团副总裁 Yasuyuki Higuchi 一同站在台上,宣布在两个新地区正式发布 Windows Azure:日本东部和日本西部.能够亲自见证 Micr ...
- C++模板:二分图匹配
int Dfs(int k){ for(int i=0;i<v[k].size();i++){ int a=v[k][i]; if(used[a]==0){ used[a]=1; if(link ...
- ExpandableListView(二)替换箭头图标被拉伸的问题
之前写过一篇替换系统默认图标的文章,之后又发现了问题,当替换成自己的图片之后,图片被拉伸了!为了解决这个问题,我几乎尝试了所有方法,结果都不理想 我试过的方法,在布局里,把textview上的内容字体 ...
- AS3 Post 参数和ByteArray的方法及服务器端接收
as端: (form表单形式)req.method = URLRequestMethod.POST; var reqHeader:URLRequestHeader = new URLRequestHe ...
- Android学习之Drawable(一)
Drawable有很多种,它们表示一种图像概念,但它们不全是图片.Drawable是什么呢?下面是Google Android API中的定义: A Drawable is a general abs ...
- c++ 容器、继承层次、句柄类
一.容器与继承 在容器中保存有继承关系的对象,如果定义成保存基类对象,则派生类将被切割,如果定义成保存派生类对象,则保存基类对象又成问题(基类对象将被强制转换成派生类对象,而派生类中定义的成员未被初始 ...
- 谓词--Predicate
去苹果的的技术官网搜索-Predicate就会找到相关的文档-Predicate Programming Guide 1,创建谓词时 %@是变量时不加单双引号,常量是加单引号,加双引号需要转义符号\ ...
- VC++中的DDX和DDV
DDX/DDV 通过使用ClassWizard向对话类添加成员变量,你可以利用ClassWizard所提供的高效特征,为对话数据交换和对话数据验证自动生成源代码,也就是人们所熟知的DDX/DDV ...