时间: 2021-08-13 作者:daque
sql server 2000使得以xml导出数据变得越发大略,但在sql server 2000中导出xml数据并对其举行处置则有些烦恼。 即使你参考books online(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数据所须要的任何名字空间索引(namespace references)。提防在这边展示的任何url都须要用尖括号(<>)括起来; 假如所传播的那些参数都灵验,而且xml文书档案生存,那么你的xml数据就会被寄存到外存中去。此刻你就不妨挪用sp_xml_preparedocument,传播寄存有xml文献的变量,而后实行openxml。语法如次: openxml(idocint [in],rowpatternnvarchar[in],[flagsbyte[in]]) [with (schemadeclaration | tablename)] 提防:在正文中没有充满的笔墨来刻画openxml所接受的参数。请参见bol以获得更多消息。在transact-sql reference中搜索openxml。 此刻咱们仍旧达到了结果的办法。一切剩下的处事即是导出一个本质的xml文献到sql并举行处置(很奇快干什么一切的bol示例都没有波及到这一要害的局部)。 (我必需感动我的共事billy pang所赋予的扶助。他扶助我处置这个题目,并给出了代码——纵然出于正文须要我对代码举行了减少。感谢billy!) 基础的本领是,将文献逐行按文本读取。而后把一切读取的行贯穿为一个大的varchar变量。结果,将变量传播给前方所说的代码。 以次即是读取文献并将其实质寄存到某变量的代码: declare @filename varchar(255) declare @execcmd varchar(255) declare @y int declare @x int declare @filecontents varchar(8000) create table #tempxml(pk int not null identity(1,1), thisline varchar(255)) set @filename = ’c:\temp\currentsettings.xml’ set @execcmd = ’type ’ + @filename set @filecontents = ’’ insert into #tempxml exec master.dbo.xp_cmdshell @execcmd select @y = count(*) from #tempxml set @x = 0 while @x <> @y begin set @x = @x + 1 select @filecontents = @filecontents + thisline from #tempxml where pk = @x end select @filecontents as filecontents drop table #tempxml 此刻在变量@filecontents变量中你仍旧赢得了文献的十足实质。所须要做的不过将变量经过@xmltext参数传播给sp_xml_preparedocument,而后再挪用openxml。 有了这种处置方法,对xml文书档案举行百般处置就变成了大概。你不妨将xml文书档案同sql表格贯穿在一道而无需导出数据,而后对那些数据举行insert、pdate和delete等任何操纵。