仓酷云

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

[学习教程] MSSQL网页设计用SQL 2000创立用户化XML流

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:26:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的的女儿也叫My。xml|创立你大概想在程序傍边利用XML,可是仅仅用一个复杂的查询是不克不及从MicrosoftSQLServer2000中猎取其信息的。

让我们假定你想将一个HTML表格毗连到一个XML数据岛,可是你非常断定要将多少表格套进母表中非常庞大。母表中的每个表格必定是XML数据布局中父节点下的一组节点。德律风号码目次就是一个很好的例子。
<TABLEdataSrc="#xmlPhoneData">
<TR>
<TD>
<SPANdataFld="fname"></SPAN>
<SPANdataFld="lname"></SPAN>
</TD>
</TR>
<TR>
<TD>
<TABLEdataSrc="#xmlPhoneData"dataFld="phone">
<TR>
<TD><SPANdataFld="phone_type"></SPAN>:</TD>
<TD><SPANdataFld="phone_no"></SPAN></TD>
</TR>
</TABLE>
</TD>
</TR>
<TR>
<TD>
<TABLEdataSrc="#xmlPhoneData"dataFld="other_info">
<TR>
<TD><SPANdataFld="info_type"></SPAN>:</TD>
<TD><SPANdataFld="info_data">/SPAN></TD>
</TR>
</TABLE>
</TD>
</TR>
</TABLE>
TABLE代表一系列信息,包含目次中某团体的名字、一切的德律风号码和谁人人的其他信息(比如说,地点等)。
这个XML的模子以下:
<root>
<data>
<lname/>
<fname/>
<phone>
<phone_type/>
<phone_no/>
</phone>
<other_info>
<info_type/>
<info_data/>
</other_info>
</data>
</root>
只管创立这个XML模子不是不成能的,我们仍旧在本文中利用这个复杂的例子。
起首,我们将供应一些背景常识使其更周全。数据来历于三个方面:包括员工的名(fname)和姓(lname)的职工表;包括员工德律风范例(phone_type)和德律风号码(phone_no)的德律风表;包括员工其他信息(如地点等)的其他信息表(other_info)。
假如你想将信息从这些表中抓取到一个纪录会合,SQL查询能够以下:
SELECTemployee.lname,employee.fname,phone.phone_type,phone.phone_no,
other_info.info_type,other_info.info_dataFROMemployeeLEFTJOINphoneON
phone.employee_id=employee.employee_idLEFTJOINother_infoON
other_info.employee_id=employee.employee_id
当你必要SQL2000中有XML的时分,你一般能够在查询字符串的开端输出一个FORXMLAUTO,ELEMENTS语句,你就能够失掉想要的XML字符串。可是,多个节点会有一点小成绩。单个节点很简单,但当你援用多个表格时,你大概不会花成天工夫往实验取得想要的XML输入。
另外一个办法就是封闭行盘算和数据输入。你能够经由过程将一个指针移进母表数据,用一个指令来操纵纪录,然后从带有FORXMLAUTO、ELEMENTS语句的其他表格选择相干纪录以分流XML输入来完成。
这个功效最好保留到一个存储程序,由于指针对照慢,而一个存储程序被事前编纂好。上面就是完成这项义务的存储程序(TransactSQL)。
DECLARE@employee_idint
DECLARE@fnamevarchar(50)
DECLARE@lnamevarchar(50)
DECLAREphone_cursorCURSORFORSELECTemployee_id,fname,lnameFROMemployees
ORDERBYlname,fname
SETNOCOUNTON
OPENphone_cursor
FETCHNEXTFROMphone_cursorINTO@employee_id,@fname,@lname
WHILE@@FETCH_STATUS=0
BEGIN
SELECT<data><fname>+@fname+</fname><lname>+@lname+
</lname>
SELECTphone_type,phone_noFROMphoneWHEREemployee_id=
@employee_idFORXMLAUTO,ELEMENTS
SELECTinfo_type,info_dataFROMother_infoWHEREemployee_id=
@employee_idFORXMLAUTO,ELEMENTS
SELECT</data>
FETCHNEXTFROMphone_cursorINTO@employee_id,@fname,@lname
END
CLOSEphone_cursor
DEALLOCATEphone_cursor
SETNOCOUNTOFF
GO
这几句SQL创立了一个用以存储员工数据和反复实行的指针。为懂得除每个SELECT语句后的行盘算输入功效,NOCOUNT被设置为ON。当指针中的每笔记录在被操纵的时分,组成了一个包括着XML输入的名和姓节点字符串。德律风信息和其他信息也都创立了XML。
然后,父节点封闭。在乐成地完成了指针操纵今后,封闭指针并对其再分派。这就失掉了一个切合方针XML模子的XML字符串。
为了无效的利用这个XML输入字符串,输入必需存储在一个ADO流工具中。使用流工具中的ReadText办法能够会见数据:
<XMLid="xmlPhoneData"name="xmlPhoneData">
<%
DimadoConn,adoCmd
DimadoStream
SetadoConn=Server.CreateObject("ADODB.Connection")
SetadoCmd=Server.CreateObject("ADODB.Command")
adoConn.ConnectionString="SomeConnectionStringToMSSQL2K"
adoConn.Open
SetadoCmd.ActiveConnection=adoConn
SetadoStream=Server.CreateObject("ADODB.Stream")
adoCmd.CommandType=4adCmdStoredProc
adoCmd.CommandText="get_test_phone"
adoStream.Open
adoCmd.Properties("OutputStream")=adoStream
adoCmd.Execute,,1024adExecuteStream
Response.WriteadoStream.ReadText(-1)
adoStream.Close
SetadoStream=Nothing
adoConn.Close
SetadoCmd=Nothing
SetadoConn=Nothing
%>
</XML>
以上代码创立了一个ADO到SQL2000的毗连,实行了一个存储程序。了局被贮存在ADO流工具(adoStream)中。其数据写进Response缓冲器,流工具被封闭,然后是一些“清仓”操纵。
这个典范供应了一个创立用户化XML计划的一样平常办法。经由过程将HTML表格毗连到XML数据岛,你能够制造一些针对性的办理办法。
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。
小魔女 该用户已被删除
沙发
发表于 2015-1-19 12:08:48 | 只看该作者
Mirror可以算是SQLServer的Dataguard了。但是能不能被大伙用起来就不知道了。
柔情似水 该用户已被删除
板凳
发表于 2015-1-25 16:27:30 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
第二个灵魂 该用户已被删除
地板
发表于 2015-2-3 09:59:58 | 只看该作者
每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-26 03:47:27 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
不帅 该用户已被删除
6#
发表于 2015-2-26 03:47:27 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
分手快乐 该用户已被删除
7#
发表于 2015-3-8 11:51:34 | 只看该作者
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-15 22:27:50 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
活着的死人 该用户已被删除
9#
发表于 2015-3-22 17:11:00 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 19:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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