|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的: SQLServer2000使得以XML导出数据变得加倍复杂,但在SQLServer2000中导进XML数据并对其举行处置则有些贫苦。 假如你参考BooksOnline(BOL),你会发明有相干的条目,包含OPENXML和OPENROWSET。一切的这些例子都撑持将XML文本作为已声明的变量,这关于常常处置文本的用户来讲十分便利,但关于但愿在开辟中读取XML文件并举行响应处置的开辟职员来讲就不是如许了。处置如许的成绩,也许最好从内到外来对其举行剖析。
OPENXML是一个rowset函数(即前往一个rowset),它的事情体例相似于rowset函数OPENQUERY和OPENROWSET。利用OPENXML能够对XML数据实行JOINs操纵而无需起首导进数据。你还能够将其同INSERT、SELECT、UPDATE和DELETE等操纵团结利用。
但是,要利用OPENXML,你必需实行两项OPENQUERY和OPENROWSET其实不必要的义务。这两项义务必要两个体系存储历程。
第一个是sp_xml_preparedocument,它将读取特定的XML文本并将其内容提取到内存中。其语法以下:
sp_xml_preparedocument@hdoc=OUTPUT,
[,@xmltext=]
[,@xpath_namespaces=
详细参数以下:
@hdoc:指向某内存地区的句柄(从感化上看同等于一个指针),相干数据寄存在这里。注重这是一个输入变量,当该历程运转后,该变量将包括指向XML文件内容在内存地点的句柄。因为你必要在随后利用此了局,因而要确保对其举行保留;
@xmltext:实践上你所但愿处置的XML文本;
@xml_namespaces:为了一般操纵你的XML数据所必要的任何名字空间索引(namespacereferences)。注重在这里呈现的任何URL都必要用尖括号()括起来;
假定所传送的这些参数都无效,而且XML文档存在,那末你的XML数据就会被寄存到内存中往。如今你就能够挪用sp_xml_preparedocument,传送寄存有XML文件的变量,然后实行OPENXML。语法以下:
OPENXML(idocint[in],rowpatternnvarchar[in],[flagsbyte[in]])
[WITH(SchemaDeclaration|TableName)]
注重:在本文中没有充足的笔墨来形貌OPENXML所吸收的参数。请参阅BOL以猎取更多信息。在Transact-SQLReference中查找OPENXML。
如今我们已抵达了最初的步骤。一切剩下的事情就是导进一个实践的XML文件到SQL并举行处置(很奇快为何一切的BOL示例都没有触及到这一关头的部分)。
(我必需感激我的同事BillyPang所赐与的匡助。他匡助我办理这个成绩,并给出了代码――只管出于本文必要我对代码举行了扩充。感谢Billy!)
基础的技能是,将文件逐行按文本读取。然后把一切读取的行毗连为一个年夜的VARCHAR变量。最初,将变量传送给后面所说的代码。
以下就是读取文件并将其内容寄存到某变量的代码:
DECLARE@FileNamevarchar(255)
DECLARE@ExecCmdVARCHAR(255)
DECLARE@yINT
DECLARE@xINT
DECLARE@FileContentsVARCHAR(8000)
CREATETABLE#tempXML(PKINTNOTNULLIDENTITY(1,1),ThisLineVARCHAR(255))
SET@FileName=C:TempCurrentSettings.xml
SET@ExecCmd=type+@FileName
SET@FileContents=
INSERTINTO#tempXMLEXECmaster.dbo.xp_cmdshell@ExecCmd
SELECT@y=count(*)from#tempXML
SET@x=0
WHILE@x@y
BEGIN
SET@x=@x+1
SELECT@FileContents=@FileContents+ThisLinefrom#tempXMLWHEREPK
=@x
END
SELECT@FileContentsasFileContents
DROPTABLE#tempXML
如今在变量@FileContents变量中你已取得了文件的全体内容。所必要做的只是将变量经由过程@xmltext参数传送给sp_xml_preparedocument,然后再挪用OPENXML。
有了这类办理举措,对XML文档举行各类处置就成了大概。你能够将XML文档同SQL表格毗连在一同而无需导进数据,然后对这些数据举行INSERT、PDATE和DELETE等任何操纵。
有了rowbase的binlog后,我们来分析一下怎么实现闪回。平时的DML无非三种操作,增删改,先说三种操作的日志格式。 |
|