快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

八达国际线路:SQL Server中读取XML文件的简单做法



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 @FileCon八达国际线路tents = @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等任何操作。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: