本文共 4454 字,大约阅读时间需要 14 分钟。
create table ##daylist
(out varchar(1600))set @yue2='00'
set @tt=0declare 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 onlyopen 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('insert into ##daylist values(@outchar)
set @yue2=@yue
set @outchar=''fetch point3 into
@dy,@date,@yue,@ri,@xingqi,@year end close point3 deallocate point3execute sp_makewebtask
@outputfile='d: estdaylist.htm', @query='select * from ##daylist', @templatefile='d: est ili.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 '' when 3 then '' when 4 then '' when 5 then '' when 6 then '' when 7 then '' end 在此段代码中,我们还定义了一个临时表##daylist。用来保存程序生成的页面并最后将其输出。在SQL Server中,可以在程序中建立用来保存临时结果数据的表。我们称之为临时表。临时表会在建立它的对话结束或涉及它的任务停止时自动被系统删除。当然,我们也可以通过DROP TABLE语句来显示地将其删除。 临时表分为全局和局部两种。全局临时表可以被当前所有的对话使用,而局部临时表只能被建立它的对话使用。由于我们将在一个扩展存贮过程中使用此表(这样相当于在另一个对话之中访问此表),所以我们选择建立一个全局临时表。全局临时表和局部临时表的区别在于全局临时表的名字前有两个"#",而局部临时表的名字前只有一个"#"。 此段代码使用的导出模板文件rili.tml十分简单,其代码如下: 出版报 最后导出的日期列表页面文件中仅仅包含简单的HTML语句,其尺寸也大大地缩小了。从原来的几百KB缩小到了只有三十KB左右。在本书配套光盘的SQLServer目录下,你可以找到通过此段代码生成的一个例子文件daylist.htm。来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-124428/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10294527/viewspace-124428/