WHILE @x @y

@xmltext:实际上你所希望处理的XML文本;

BEGIN

代码如下复制代码

DECLARE @y INT

DECLARE @ExecCmd VARCHAR(255)

[, @xmltext = ]

韦德国际bv1946韦德国际1946手机版,OPENXML(idocint [in],rowpatternnvarchar[in],[flagsbyte[in]])

DROP TABLE #tempXML

代码如下复制代码

SET @FileName = ‘C:TempCurrentSettings.xml’

有了这种解决办法,对XML文档进行各种处理就成为了可能。你可以将XML文档同SQL表格连接在一起而无需导入数据,然后对这些数据进行INSERT、PDATE和DELETE等任何操作。

假设所传递的这些参数都有效,并且XML文档存在,那么你的XML数据就会被存放到内存中去。现在你就可以调用sp_xml_preparedocument,传递存放有XML文件的变量,然后执行OPENXML。语法如下:

SELECT @FileContents = @FileContents + ThisLine from #tempXML WHERE PK

DECLARE @FileContents VARCHAR(8000)

SELECT @y = count(*) from #tempXML

CREATE TABLE #tempXML(PK INT NOT NULL IDENTITY(1,1), ThisLine
VARCHAR(255))

OPENXML是一个rowset函数,它的工作方式类似于rowset函数OPENQUERY和OPENROWSET。使用OPENXML可以对XML数据执行JOINs操作而无需首先导入数据。你还可以将其同INSERT、SELECT、UPDATE以及DELETE等操作联合使用。

[, @xpath_namespaces =

= @x

注意:在本文中没有足够的文字来描述OPENXML所接收的参数。请参阅BOL以获取更多信息。在Transact-SQL
Reference中查找OPENXML。

SET @ExecCmd = ‘type ‘ + @FileName

DECLARE @FileName varchar(255)

DECLARE @x INT

END

具体参数如下:

第一个是sp_xml_preparedocument,它将读取特定的XML文本并将其内容提取到内存中。其语法如下:

SET @x = @x + 1

基本的技巧是,将文件逐行按文本读取。然后把所有读取的行连接为一个大的VARCHAR变量。最后,将变量传递给前面所说的代码。

然而,要使用OPENXML,你必须执行两项OPENQUERY和OPENROWSET并不需要的任务。这两项任务需要两个系统存储进程。

代码如下复制代码

[WITH (SchemaDeclaration | TableName)]

现在我们已经到达了最后的步骤。所有剩下的工作就是导入一个实际的XML文件到SQL并进行处理。

SELECT @FileContents as FileContents

INSERT INTO #tempXML EXEC master.dbo.xp_cmdshell @ExecCmd

sp_xml_preparedocument @hdoc = OUTPUT,

SET @x = 0

@hdoc:指向某内存区域的句柄,相关数据存放在这里。注意这是一个输出变量,当该进程运行后,该变量将包含指向XML文件内容在内存地址的句柄。由于你需要在随后使用此结果,因此要确保对其进行保存;

现在在变量@FileContents变量中你已经获得了文件的全部内容。所需要做的只是将变量通过@xmltext参数传递给sp_xml_preparedocument,然后再调用OPENXML。

以下就是读取文件并将其内容存放到某变量的代码:

SET @FileContents = ”

@xml_namespaces:为了正常操作你的XML数据所需要的任何名字空间索引。注意在这里出现的任何URL都需要用尖括号括起来;

相关文章