用XML和SQL 2000来管理存储过程调用_XML/RSS

创建多个带有不同参数的存储过程(stored procedure)来完成同一个任务总是一个很大的负担。利用XML字符串向你的存储过程发送参数就能够简化这个任务;这也让COM组件的设计更简单。 

实现这个目的的方法是将你的参数作为一个XML字符串来传递,并剖析XML来取回你所需要的数据,然后继续实现你所需要集成的功能。你不仅可以通过XML来获取一些参数,你还可以对XML所创建的DOM文档运行查询,以此来封装多个存储过程。我会提供一些例子,告诉你如果实现这个目的,并简要地描述每个例子。

在本例里,为了更新一个Customer表格里的姓名字段,我会传递几个参数。为了获得customerid(身份列)和新的姓名字段,XML会被剖析。我传递给过程的XML字串就像下面的这样:

<root><Customer><customerid>3</customerid><name>Acme
 Inc.</name></Customer></root>

要被创建的存储字段就像下面的这样:

CREATE PROCEDURE update_Customer (@xmldatavarchar(8000)) AS
DECLARE @customeridint
DECLARE @customernamevarchar(50)
DECLARE @xmldata_idint

EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, ''

SELECT @customerid = customerid, @customername = [name] FROM
 OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint, [name]
 varchar(50))

EXEC sp_xml_removedocument @xmldata_id

UPDATE Customer SET Customer.[name] = ISNULL(@customername, Customer.[name])
WHERE Customer.tblID = @customerid

 

这个过程首先就声明我们将要用到的变量会保存相关信息。在此之后,DOM文档被打开,一个“句柄(handle)”会被返回到sp_xml_preparedocument调用的第一参数里。

这个调用的第二个参数是用于新DOM文档的XML源文件。这个“句柄”是在进行OPENXML调用的时候用来从DOM里查询信息的。OPENXML调用的第二个参数是父节点的一个Xpath映射,这些父节点包含有要被执行的数据。
 

第三个参数(2)指明,以元素为中心的映射会被使用。WITH子句为被剖析的数据提供了数据列集(rowset)格式,sp_xml_removedocument调用会删掉DOM文档的源文件。

在下面这个例子里,我会传递一系列用户ID,用以删除多个数据列。下面就是XML字符串的内容:

<root><Customer><customerid>1</customerid></Customer><Customer><customerid>
2</customerid></Customer><Customer><customerid>3</customerid></Customer>
</root>

 

相应的存储过程看起来就像下面这样:
. . .

EXEC sp_xml_preparedocument @xml_id OUTPUT, @xmldata, ''

DELETE FROM Customer WHERE Customer.tblID IN (SELECT customerid FROM
 OPENXML(@xmldata_id, '//Customer', 2) WITH (customeridint))

. . .

有了这个存储过程就不再需要创建一个冗长的SQL查询字符串,用以在ADO里传递或者多次调用一个存储过程了。这也会消除多次调用对网络流量所造成的影响。

正如你能够看到的,微软的SQL 2000让整个过程稍稍简单了一点。要记住,这一方法的不足之处在于:在SQL 2000进行XML任务的时候,将XML作为一个参数发送会被限制到8,000字符。和以往一样,不要忽视了精心策划的好处。

访问MSDN库能够获得更多关于OPENXML、sp_xml_preparedocument以及sp_xml_removedocument的信息。

 

时间: 2024-08-02 17:41:00

用XML和SQL 2000来管理存储过程调用_XML/RSS的相关文章

针对SQL 2000 的分页存储过程代码分享_MsSql

复制代码 代码如下: ---------------------------------------------------- --针对SQL 2000 的分页存储过程 --Time:2008-9-25 ---------------------------------------------------- ALTER PROCEDURE [dbo].[uoSp_RecordPager] --要分页显示的表名,可多表连查,但不能使用别名. --例:uo_Article LEFT JOIN uo_

针对SQL 2000 的分页存储过程代码分享

复制代码 代码如下: ---------------------------------------------------- --针对SQL 2000 的分页存储过程 --Time:2008-9-25 ---------------------------------------------------- ALTER PROCEDURE [dbo].[uoSp_RecordPager] --要分页显示的表名,可多表连查,但不能使用别名. --例:uo_Article LEFT JOIN uo_

How to generate XML with SQL 2000?

以前在介绍SQL2k的时候已经提到了SQL2k对XML的支持,使用for XML语句就可以很容易的把执行的结果转化为一个XML,这样可以在很大程度上提高系统运行效率和开发速度,详见What's new in Microsoft SQL Server 2000(四),更详细的内容请参见Books Online.但是在使用ADO(Required ADO 2.6)访问返回的XML的方式和原来的Recordset是有所不同的.如果你还是使用Recordset访问的话,只能得到一个Unicode格式的X

XML与HTML的结合(上)_XML/RSS

北京邮电大学 张剑 XML的局限性 目前,许多Web网站的内容数据都存放在数据库或数据文件中.对于Web程序开发人员来说,如果要想把有用的信息从数据库中提取出来,传统的方法是在服务器端编写脚本程序(如VBScript.JavaScript.CGI.ASP.Perl等等),通过对数据库执行SQL查询得到相关记录,然后把查询结果组织成HTML页面返回给客户端,用户使用浏览器观察最终结果. 为了提高系统服务的灵活性.可扩展性,使服务对象范围更广,许多商业网站都尽可能地把商务规则.原始数据和表现形式当做

XML与HTML的结合(下)_XML/RSS

XML的嵌套处理 一般情况下,我们从数据库中查询得到的结果集可能很大,所以从服务器返回到客户端时,数据会被分成若干个页面分别进行传递.此时,利用TABLE元素中的DATAPAGESIZE属性可以指定每个页面包含记录集条目的个数. 例如: <TABLE DATASRC="#xmldso" DATAPAGESIZE=10> 很显然,如果XML数据格式是对称的,则无论是映射到ADO记录集还是绑定到表格元素上,效果都会很好.而在实际应用中,XML数据为非对称的例子也很多,比如一本书

XML入门精解之结构与语法_XML/RSS

现在我们暂且使用"记事本"来创建我们的XML文件吧.先看一个XML文件: 例1 〈?xml version="1.0" encoding="gb2312" ?〉 〈参考资料〉 〈书籍〉 〈名称〉XML入门精解〈/名称〉 〈作者〉张三〈/作者〉 〈价格 货币单位="人民币"〉20.00〈/价格〉 〈/书籍〉 〈书籍〉 〈名称〉XML语法〈/名称〉 〈!--此书即将出版--〉 〈作者〉李四〈/作者〉 〈价格 货币单位="

用SQL 2000创建用户化XML流

xml|创建 你可能想在程序当中使用XML,但是仅仅用一个简单的查询是不能从Microsoft SQL Server 2000中获取其信息的. 让我们假设你想将一个HTML 表格连接到一个XML数据岛,但是你十分确定要将若干表格套入母表中十分复杂.母表中的每一个表格一定是XML数据结构中父节点下的一组节点.电话号码目录就是一个很好的例子. <TABLE dataSrc="#xmlPhoneData"><TR>    <TD>        <S

SQL Server 2000内存管理内幕

Introduction 在这篇专栏里,我们将从开发者的角度来探讨SQL Server内存管理内幕.就是说,我们将讨论SQL Server使用API和操作系统功能管理内存的方式及其工作原理.通过这种方式探讨一个产品,将有助于我们理解产品开发者的思路,以及他们所设计的使用方法.理解一个产品的工作原理和它的设计用途,是掌握这个产品的关键. 我们将从一些基础的Windows内存管理基本原理介绍开始.和所有的32位Windows应用程序一样,SQL Server使用Windows内存管理功能分配.释放.

sql server 2005分页存储过程和sql server 2000分页存储过程

 sql server 2005分页存储过程和sql server 2000分页存储过程,sql 2005的分页存储过程分3个版本,一个是没有优化过的,一个是优化过的,最后一个支持jion的,sql2000的分页存储过程,也可以运行在sql2005上,但是性能没有sql2005的版本好. USE [svnhost] GO /****** 对象:  StoredProcedure [dbo].[up_Page2005]    脚本日期: 05/21/2008 11:27:05 ******/ SE