冷月葬花魂 发表于 2015-1-16 22:20:36

MSSQL教程之XML 文档与数据库表

这里我们讨论用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

大家注意一点。如下面的例子:

变相怪杰 发表于 2015-2-9 16:14:07

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

admin 发表于 2015-2-27 10:38:28

原来公司用过MYSQL自己也只是建个表写个SQL

老尸 发表于 2015-3-9 00:56:37

从项目平台的选择上讲,我们关心的,应该是一款产品能不能满足任务需求,而不是网上怎么说。

莫相离 发表于 2015-3-16 20:01:48

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

活着的死人 发表于 2015-3-23 01:41:57

一个是把SQL语句写到客户端,可以使用DataSet进行加工;
页: [1]
查看完整版本: MSSQL教程之XML 文档与数据库表