快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

使用XML和SQL SERVER 2000治理存储过程调用

创建几个带不同参数的存储过程去完成同相同任务对我们来说一直以来都是一个负担。通过使用XML字符串传递参数给你的存储过程可以简化这个任务,从而使设计COM组件变得更加简朴。
达到这个目标的方式是将你的参数作为一个XML字符串传入,然后解析XML以取得你需要的数据,最后继承完成你需要实现的功能。你不但可以从XML中获得参数,你还可以在由XML创建的DOM文档运行查询语句,完成几个存储过程调用。我将给出一些例子来说明怎样做,每个例子都有一个简朴的解释。

在这个例子中,我将传递一些参数用以更新Customer表的name域。XML被解析以获得customerid(标识列)和新的name。我传给过程的XML字符串如下:
<root><Customer><customerid>3</customerid><name>Acme
Inc.</name></Customer></root>
创建的存储过程如下:
CREATE PROCEDURE update_Customer (@xmldata varchar(8000)) AS
DECLARE @customerid int
DECLARE @customername varchar(50)
DECLARE @xmldata_id int

EXEC sp_xml_preparedocument @xmldata_id OUTPUT, @xmldata, \\\'\\\'

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

EXEC sp_xml_removedocument @xmldata_id

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

这个过程首先声明我们用于存储相关信息的变量。之后,打开DOM文档,调用过程sp_xml_preparedocument,其第一个参数返回一个“句柄”。

这个过程调用的第二个参数是新DOM文档的XML源。第一个参数返回的“句柄”在OPENXML调用中用于查询DOM文档。OPENXML调用的第二个参数是一个映射到包含要提取数据的父节点的扩展路径。

第三个参数(2)指明使用以元素为中央的映射。WITH子句为被解析的数据提供行集合格式,然后sp_xml_removedocument调用删除DOM文档资源。

在下面的另一个例子中,我将会根据传入的一组customer 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 (customerid int))
. . .

这个存储过程的使用避免了建立一个长SQL查询字符串来通过ADO传递,或者多次调用同一个存储过程。也避免了由于多次调用引起的网络拥挤。
正如你看到的,使用Microsoft SQL Server 2000可以使一些事情变得比较简朴。但记住是当你在SQL Server 2000中使用XML时,作为参数传入的XML不能超过8000个字符。就像常说的,不要过高的看待一件好事的好处。
参考MSDN库取得更多关于OPENXML, sp_xml_preparedocument 和 sp_xml_removedocument 的信息。
返回类别: 教程
上一教程: ASP分页的基于对象的解决
下一教程: FILESYSTEMOBJECT处理文件

您可以阅读与"使用XML和SQL SERVER 2000治理存储过程调用"相关的教程:
· ASP中存储过程调用的两种方法,以及不采用存储过程的方法比较
· ASP+SQL SERVER分页方式(不用存储过程)
· 几种存储过程调用
· 利用SQL SERVER存储过程实现ASP用户身份验证
· SQL Server 存储过程的分页
    微笑服务 优质保证 索取样品