摘 要 本文从实际应用角度,围绕着Microsoft SQL Server 6.5 中与Web应用密切相关的存储过程SP—MAKEWEBTASK进行扩展,以完成快速生成系列式主页的工作。
关键词 Web,Microsoft SQL Server,存储过程

  在微软公司的数据库产品Microsoft SQL Server 6.5版本开始,包含了一个工具——SQL Server Web Assistant。利用它,可以将数据库中的记录方便地转换成HTML文件格式,在Web上使用。如果Web服务器本身就是Microsoft NT SERVER,经过相应配置,当出现数据库的记录增、删、改,或当一个指定的时间到达时,由Web Assistant生成的Web页面内容能自动更新,进而方便地实现数据库的联机查询。
  Web Assistant除以图形化用户界面出现外,还以Microsoft SQL Server 存储过程sp—makewebtask形式出现。图形化用户界面只能用与基于INTER芯片的平台上,而存储过程sp—makewebtask可以在任何SQL SERVER支持的平台上使用。sp—makewebtask同样支持HTML文件模板——即可事先定义将产生的HTML文件的整体形式,除了其中要从数据库得到的数据是用%insert—data—here%形式表示之外,其它标识符号完全与其它HTML文件一致。不仅如此,这一存贮过程还可以根据情况灵活地选用一些参数,如果能将它与其它Microsoft SQL Server 存储过程有效地加以结合,就可以满足更复杂的需求。以下以一实际例子加以说明。
  某校准备在校园网上公布即将录取的上千名学生情况。假定名单是按准考证号排序,要求每张主页上只显示20名学生,每页上还应有指向上一页,下一页的连接。对于这种任务,如等到名单拿到后再用DreamWeaver,FrontPage等开发工具一页页做,势必浪费很多时间精力。仅仅利用Web Assistant,能做到快速生成全部主页,但无法自动插入上页和下页链接。由于在实际应用中各页文件可能放置的目录,名称等等都是要根据Web服务器上的情况加以确定,开始时不能定死。针对这种情况,一条可行的解决途径就是编写一些存储过程,将学生信息,每一文件的上下页文件名(含目录名)各自作为一个数据表存放在数据库中。将来等到学生信息,文件名称,目录情况都确定下来以后,导入到数据库中,直接调用存储过程,即可轻松生成全部HTML文件:可以每次先从学生信息数据表中抽取20条记录,先利用此模板生成一临时HTML文件,其中包含了有关的学


生信息;再从链接关系数据表中得到上下页文件所在位置,用刚生成的临时文件作为模板,生成实际要求的HTML文件。
  具体而言,对于模板文件,假设名称为LIN1.HTML ,关键信息为:

……  

/*注:有关格式HTML格式信息从略*/ 

<TABLE BORDER=2 COLS=4> 

<TR> 

<%begindetail%> 

<TR> 

<TD height="25"><%insert—data—here%></TD> /*注:此栏是主考证号*/ 

<TD height="25"><%insert—data—here%></TD> /*学生姓名*/ 

<TD height="25"><%insert—data—here%></TD> /*原学校*/ 

<TD height="25"><%insert—data—here%></TD> /*录取专业*/ 

</TR> 

<%enddetail%> 

</TABLE> 

/*注:以上<TABLE>到</TABLE>间定义未来学生信息在HTML文件中的位置,来自学生信息数据表*/ 

<%begindetail%>  

<A HREF="<%insert—data—here%>"> 

<img src="/edu/files/pic/2006-5/21/065211026595544.jpg"是常见的表示上、下页的图标*/


  然后在Microsoft SQL Server 中建立数据库S1,其中包括学生录取名单表STULIST,表中字段分别为准考证号stuid char (20),学生姓名stuname char(10),原学校school char(20), 录取专业stumajor char (20);链接关系数据表linktable,其中字段分别为上页链接位置prevpage char (20),下页链接位置nextpage char (20),本页文件名ownpage char (20)。根据编程的需要,再建立两个临时表, 一个为TMPSTU,存放每次处理的20名学生的情况信息,字段与STULIST完全一致;另一个为TMPLINK,存放当前要生成HTML文件的上下页链接位置,字段为prevpage char (20) 与nextpage char (20)。
  主调用存储过程STUHTML内容为:

CREATE PROCEDURE stuhtml AS 

BEGIN 

DECLARE @ls—stuid CHAR(20) 

DECLARE @ls—stuname char(10) 

DECLARE @ls—school char(20) 

DECLARE @ls—major char(20) 

DECLARE @ls—prevpage char(20) 

DECLARE @ls—nextpage char(20) 

DECLARE @ls—ownpage char(20) 


/*以上定义与字段有关的临时变量*/ 


declare @ls—finish char(1) 

select @ls—finish = ′N′ 


/*定义循环结束标志*/ 


declare @li—rowcnt int  


/*已处理记录数计数器*/ 


declare @li—rowtot int 

select @li—rowtot = 20  


/*定义每页最多学生记录数*/ 


/*打开学生信息数据表*/ 

DECLARE stu SCROLL CURSOR FOR select * FROM s1..stulist ORDER BY stuid 

open stu 

/*打开链接关系数据表*/ 

DECLARE l—table SCROLL CURSOR FOR select * FROM s1..linktable 

open l—table 

/** 进入循环体**/ 

FETCH first FROM stu INTO @ls—stuid,@ls—stuname, 

@ls—school, @ls—major 

FETCH first from l—table into @ls—prevpage , @ls—nextpage, 

@ls—ownpage 

while (@ls—finish = "N") 

begin 

delete from s1..tmpstu 

delete from s1..tmplink 

insert s1..tmplink values (@ls—prevpage, @ls—nextpage) 

select @li—rowcnt = 1 

while ((@@FETCH—STATUS = 0) 

and (@li—rowcnt <= @li—rowtot)) 

begin 

insert s1..tmpstu values(@ls—stuid,@ls—stuname, 

@ls—school, @ls—major) 

select @li—rowcnt = @li—rowcnt +1 

FETCH next FROM stu INTO @ls—stuid, @ls—stuname, 

@ls—school,@ls—major 

end 

if (@@FETCH—STATUS <> 0) 

select @ls—finish = "Y" 

/*定义输出的HTML文件名*/ 

declare @ls—output char(20) 

declare @ls—temp char(20)  


/*定义模板文件名*/ 


select @ls—output = ′D:/TEMP/TMP.HTML′ 

select @ls—temp = ′D:/TEMP/LIN1.HTM′execute addrecord @ls—output, @ls—temp 


/*调用添加学生记录的过程*/ 


select @ls—output = @ls—ownpage 

select @ls—temp = ′D:/TEMP/TMP.HTML′ 

execute addlink @ls—output, @ls—temp 


/*调用添加链接记录的过程*/ 


FETCH next from l—table into @ls—prevpage , @ls—nextpage, @ls—ownpage 

END 

/**关闭游标**/ 

CLOSE stu 

DEALLOCATE stu 

CLOSE l—table 

DEALLOCATE l—table 

End  


/*END OF STUHTML*/



  根据实例分析,编写存储过程,在WINDOWS NT 4.0,SQL SERVER 6.5,NETSCAPE 4.0 环境下,可轻松地完成,而且具有较强灵活性,参考此例可以自行设计完成。
作者简介:付 琨 硕士,助教。主要从事Internet网络应用以及网络操作系统研究。
作者单位:上海财经大学网络中心 上海(200433)