仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 790|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL教程之XML 文档与数据库表

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:20:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
这里我们讨论用binlog来实现闪回的方案。包含SQLServer7.0在内的SQLServer系列版本其实不供应XML。撑持开辟职员之前不能不利用一个XML剖析器,如微软的XML剖析器(MSXML),并且它们必需编写本人的代码来处置细节:把分歧的元素从XML文档中提掏出来并按必要把它们放进干系表的分歧部分,然后会见干系表;大概编写代码将数据从数据库表中提掏出来,再以准确的格局放回到XML文档中。当我们在享用XML所带来的优点时,我们常会发明本人在开辟Web使用程序时不能不对付如许的事情,并且在开辟分歧的Web使用程序时仍旧不能不从头编写代码。因而可知,开辟职员真正必要的是一种在数据库中处置XML的一样平常办法而这恰是利用SQLServer2000时所能作到的,即在干系式数据表中存储XML文档,从干系式数据中发生XML文档。

20.3.1从干系式数据中发生XML文档
在SQLServer2000中经由过程利用SELECT语句能够把查询了局存储为XML文档而不是一般意义上的了局集,如许经由过程比本来少很多的编码就能够使Web使用或别的使用间接利用XML文档,从而便利企业与供给商之间的营业交换。

将干系数据库的查询了局显现成XML文档是经由过程FORXML语句来完成的。在利用FORXML语句的同时能够指定XML的MODE(RAW、AUTO、EXPLICIT)和XMLDATA的形式(Schema)。FORXML语句的语律例则为:
FORXMLmode[,XMLDATA][,ELEMENTS][,BINARYBASE64]
各参数的寄义申明以下:

  • mode
    暗示前往了局集的XMLmode,共有三种取值,即RAW、AUTO、EXPLICIT。
  • XMLDATA
    暗示将前往XMLDATA形式。
  • ELEMENTS
    利用该选项时,暗示将响应的干系表列作为XML文档的子元素;不然其将与XML属性相婚配。仅中选用AUTO时才可使用该选项。
  • BINARYBASE64
    暗示由查询前往的二进制数据以64位编码的情势显现。
1RAW形式
利用RAW形式时查询了局会合的每行都作为XML文档的一个元素,非空列将作为响应的XML文档元素的属性,其属性名与列名坚持分歧。


2AUTO形式
利用AUTO形式时查询了局集作为嵌套XML元素。FROM从句中的每个表名作为XML元素,在SELECT语句中的各列作为XML文档元素的属性。假如利用ELEMENTS选项,则SELECT语句中的各列作为XML文档元素的子元素。

3EXPLICIT形式
在利用EXPLICIT形式时,查询复写器把持由查询前往的了局集所构成的XML文档的格局,元素的嵌套条理。和属性同时必需包管XML文档是良构(wellformed)的,而且具有无效的XML-DATA形式。

20.3.2在干系数据库表中存储XML文档
在实行B2C(贸易到客户)电子商务形式的企业中,客户常常间接在Web页面订购产物付出现金,这些数据一样平常其实不间接存进数据库中而是基于平安性和在一致尺度下数据转换具有高效性的思索而将其存储在XML文档中,然后再存进数据库中。这就必要从XML文档中提取数据信息并将其存进干系数据库中。在SQLServer2000中OPENXML语句供应了在干系数据库表中存储XML文档的功效。
OPENXML是一个行集供应者,与表和视图极其类似。经由过程OPENXML提取XML文档数据与读取干系型行了局集数据一样复杂、高效。在利用OPENXML前必需起首挪用sp_xml_preparedocument体系历程,其次要感化是剖析XML文档,并前往该文档的文件指针。然后该文件指针传给OPENXML,其依据传来的参数将XML文档转换成行了局集。最初经由过程挪用sp_xml_removedocument体系历程来开释由XML文档所占用的内存空间。其详细实行历程请参看0-2。


目前的方案是用mysqlbinlog工具,增加一个Flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。
冷月葬花魂 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 09:07:10 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
透明 该用户已被删除
板凳
发表于 2015-1-25 21:40:10 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-4 05:02:53 | 只看该作者
大家注意一点。如下面的例子:
变相怪杰 该用户已被删除
5#
发表于 2015-2-9 16:14:07 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
admin 该用户已被删除
6#
发表于 2015-2-27 10:38:28 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
老尸 该用户已被删除
7#
发表于 2015-3-9 00:56:37 | 只看该作者
从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。
莫相离 该用户已被删除
8#
发表于 2015-3-16 20:01:48 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
活着的死人 该用户已被删除
9#
发表于 2015-3-23 01:41:57 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:28

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表