分享
 
 
 

SQL Server静态页面导出技术

王朝mssql·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

本段文章节选自铁道出版社新出的《用BackOffice建立Intranet/Extranet应用》一书(现已在海淀图书城有售,外地或者需要送货上门的读者可以到www.wanbook.com.cn或www.e-bookshop.com.cn上在线购买。本书书号为ISBN7113039448)。本书详尽地讲述了如何使用微软BackOffice系列产品来组建Intranet/Extranet应用。通过它您将掌握NT的安装和设置、使用IIS建立Web站点、通过ILS建立网络会议系统、用Exchange建立企业的邮件和协作系统、用SQL Server建立Web数据库应用、用Proxy Server建立同Internet安全可靠的连接、用Media Server建立网络电视台/广播站、用Chart server建立功能强大的聊天室、用Site Server建立个性化的邮件列表和分析网站的访问情况、用Commerce Server建立B2B或B2C的电子商务网站。此外本书还对网络的安全性进行了讨论,从而指导您建立一个更为健壮和安全的网络应用。阅读本书之后,您将发现实现丰富多彩的网络应用原来这样简单……

绝对原创,欢迎转载。但请务必保留以上文字。

最后,我们来介绍导出日期列表页面部分的代码。我们在前面通过IDC技术产生过日期的列表页面,但是在静态页面导出时采用的方法与其不同。前面通过IDC所产生的页面在浏览器端通过Java来完成对每个日期产生最终页面的工作。这样会造成产生的页面文件过于庞大。因为对于每个日期,都要包含下面的一段Java代码:

<script>

yue1=yue2;

yue2=4;

if (yue1!=yue2){

tt=0;

if (yue1==0){

document.write(´<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>1999-4月</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr><tr>´)

}else{

document.write(´</tr></table>´)

document.write(´<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>1999-4月</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr><tr>´)

}

}

ri=22;

xingqi=5;

if (tt!=0){

if (xingqi<7) {

document.write(´<td><FONT SIZE="+1"><a href="goto.idc?day=1999-04-22" TARGET="goto"><b>22</b></a></FONT></td>´);

}else {

document.write(´<td><FONT SIZE="+1"><a href="goto.idc?day=1999-04-22" TARGET="goto"><b>22</b></a></FONT></td></tr><tr>´);

}

}else{

tt=1;

for (i=1;i < xingqi;i++){

document.write(´<td></td>´);

}

document.write(´<td><FONT SIZE="+1"><a href="goto.idc?day=1999-04-22" TARGET="goto"><b>22</b></a></FONT></td>´);

if (xingqi==7){

document.write(´</tr><tr>´);

}

}

</script>

如果为一年的报纸内容来生产一个页面的话,其大小可能会超过几百KB。这对于局域网来说,算不了什么。这几百KB数据所带来的延迟用户一般是察觉不到的。因为在局域网上传送这些数据所耗费的时间可能还不到一秒。而对于Internet用户,就不得不考虑其有限的带宽了。如此之大的页面文件所带来的延迟,恐怕是用户所不能承受的。所以必须缩小此页面文件的尺寸。我们使用游标和流控制语句在进行静态页面导出的时候,在服务器端完成相应的判断工作。从而只生产"纯"HTML文件。下面就是实现此功能的代码段:

declare

@dy int,

@date varchar(20),

@yue varchar(2),

@yue2 varchar(2),

@ri int,

@xingqi int,

@year int,

@outchar varchar(1600),

@tt int

create table ##daylist

(out varchar(1600))

set @yue2=´00´

set @tt=0

declare point3 cursor for

SELECT distinct

dy=datepart(dy,riqi),date=left(convert(varchar(40),riqi,20),10),

yue=convert(varchar(2),datepart(mm,riqi)),ri=datepart(dd,riqi),xingqi=datepart(dw,riqi),year=datepart(yy,riqi)

FROM gaojian

where kanwu = ´出版报´

order by year,dy

for read only

open point3

fetch point3 into

@dy,@date,@yue,@ri,@xingqi,@year

while (@@fetch_status=0)

begin

if @yue<>@yue2

begin

set @tt=0

if @yue2=0

insert into ##daylist

values(´<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>´+convert(varchar(4),@year)+

´年´+@yue+´月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>´)

else

insert into ##daylist

values(´</tr></table><TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>´+

convert(varchar(4),@year)+´年´+@yue+´月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>´)

end

if @tt<>0

if @xingqi < 7

set @outchar=@outchar+´<td><a href="´+@date+´/index.htm" TARGET="new">´+convert(varchar(2), @ri)+´</a></td>´

else

set @outchar=@outchar+´<td><a href="´+@date+´/index.htm" TARGET="new">´+convert(varchar(2), @ri)+´</a></td></tr><tr>´

else

begin

set @tt=1

set @outchar=

case

when @xingqi=1 then ´´

when @xingqi=2 then ´<td></td>´

when @xingqi=3 then ´<td></td><td></td>´

when @xingqi=4 then ´<td></td><td></td><td></td>´

when @xingqi=5 then ´<td></td><td></td><td></td><td></td>´

when @xingqi=6 then ´<td></td><td></td><td></td><td></td><td></td>´

when @xingqi=7 then ´<td></td><td></td><td></td><td></td><td></td><td></td>´

end

if @xingqi < 7

set @outchar=@outchar+´<td><a href="´+@date+´/index.htm" TARGET="new">´+convert(varchar(2), @ri)+´</a></td>´

else

set @outchar=@outchar+´<td><a href="´+@date+´/index.htm" TARGET="new">´+convert(varchar(2), @ri)+´</a></td></tr><tr>´

end

insert into ##daylist values(@outchar)

set @yue2=@yue

set @outchar=´´

fetch point3 into

@dy,@date,@yue,@ri,@xingqi,@year

end

close point3

deallocate point3

execute sp_makewebtask

@outputfile=´d:\test\daylist.htm´,

@query=´select * from ##daylist´,

@templatefile=´d:\test\rili.tml´,

@codepage=936

drop table ##daylist

如果读者十分熟悉Java语言的话,可以看到此段代码同上面的Java代码具有相类似的结构。所不同的是,它是使用SQL语言中的流控制语句来实现的。在其中我们使用了BEGIN…END、WHILE、IF…ELSE…和CASE等流控制语句。

流控制语句:

在SQL语言中,有下列流控制语句:

■ BEGIN…END:将多条SQL语句封装在其间,组成一个语句块。从而使这些语句作为一个整体来执行。

■ IF…ELSE…:其语法结构如下。

IF 布尔表达式

{sql_statement | statement_block}

[ELSE

{sql_statement | statement_block}]

当IF后面的布尔表达式的值为真时,执行IF后面的语句或语句块;当布尔表达式的值为假时,执行ELSE后面的语句或语句块。

■ GOTO语句:其语法结构如下。

定义标号:

label:

程序跳转:

GOTO label

GOTO语句强迫程序跳转到由标号标示之处的语句。

■ WHILE语句:其语法结构如下。

WHILE布尔表达式

{sql_statement | statement_block}

[BREAK]

{sql_statement | statement_block}

[CONTINUE]

WHILE语句为一个循环语句,只要其后的布尔表达式的值为真,它就会一直执行下去。BREAK语句用于将程序从此循环中跳出。而CONTINUE用于跳过其后的语句直接进入下一个循环。

■ CASE语句:CASE语句有以下两种语法结构。

简单CASE功能:

CASE 输入表达式

WHEN 条件表达式 THEN 返回表达式

[...n]

[

ELSE 返回表达式

]

END

其执行过程为:将输入表达式的值同各个条件表达式的值进行对比。如果同某个条件表达式的值相同,则返回THEN后的返回表达式的值。如果没有条件表达式的值同输入表达式的值相同,则返回ELSE后的返回表达式的值。

搜索CASE 功能:

CASE

WHEN 布尔表达式 THEN返回表达式

[...n]

[

ELSE 返回表达式

]

END

与前面的简单CASE功能不同,搜索CASE功能没有输入表达式。其执行过程为:判断WHEN后的布尔表达式是否为真,如果为真则输出THEN后的返回表达式的值并跳转到END后面的语句;如果为假则对下一个WHEN后的布尔表达式进行判断。如果所有的WHEN后面的布尔表达式的值都为假,则返回ELSE后面的返回表达式的值。

上面的代码就是用搜索CASE功能的语法结构书写的,如果将其改为用简单CASE功能的语法结构书写,其代码如下:

case @xingqi

when 1 then ´´

when 2 then ´<td></td>´

when 3 then ´<td></td><td></td>´

when 4 then ´<td></td><td></td><td></td>´

when 5 then ´<td></td><td></td><

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有