SQL Server静态页面导出技术2

12/8/2000来源:SQL技巧人气:17172

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


使用SQL语句来实现静态页面导出
    首先,我们来看看要通过静态页面导出技术实现哪些功能。我们将要把每天报纸的内容按照同IDC应用一样的格式放到出版报在ISP的主页中相应的目录之中(比如99年5月8号的报纸内容就要放到1999-05-08目录之中)。而要想达到这样的效果就需要导出三类文件:每天刊载版面的列表页面文件(每天一个)、每个版面的文章列表页面文件(每天有多少个版面,就有多少个这样的文件)、每篇文章的内容各为一个页面文件(每天有多少文章,就有多少个这样的文件)。
sp_makewebtask存贮过程语法结构和参数含义:
    建立静态页面导出任务由sp_makewebtask存贮过程来完成。下面我们来看看其具体的语法结构和参数:
    sp_makewebtask [@outputfile =] 'outputfile', [@query =] 'query'
    [, ][@fixedfont =] fixedfont]
    [, ][@bold =] bold]
    [, ][@italic =] italic]
    [, ][@colheaders =] colheaders]
    [, ][@lastupdated =] lastupdated]
    [, ][@HTMLHeader =] HTMLHeader]
    [, ][@username =] username]
    [, ][@dbname =] dbname]
    [, ][@templatefile =] 'templatefile']
    [, ][@webpagetitle =] 'webpagetitle']
    [, ][@resultstitle =] 'resultstitle']
    [
        ][, [@URL =] 'URL', [@reftext =] 'reftext']
        | [, ][@table_urls =] table_urls, [@url_query =] 'url_query']
    ]
    [, ][@whentype =] whentype]
    [, ][@targetdate =] targetdate]
    [, ][@targettime =] targettime]
    [, ][@dayflags =] dayflags]
    [, ][@numunits =] numunits]
    [, ][@unittype =] unittype]
    [, ][@procname =] procname ]
    [, ][@maketask =] maketask]
    [, ][@rowcnt =] rowcnt]
    [, ][@tabborder =] tabborder]
    [, ][@singlerow =] singlerow]
    [, ][@blobfmt =] blobfmt]
    [, ][@nrowsperpage =] n]
    [, ][@datachg =] table_column_list]
    [, ][@charset =] characterset]
    [, ][@codepage =] codepage]

    下面对sp_makewebtask存贮过程的参数逐个的进行介绍:
■    outputfile:指明存放导出的静态页面文件的路径和文件名。对于产生多个文件的情况(比如在限制了每个页面的最大记录数目时),系统会自动地在这些文件名的末尾加上数字。
■    query:要由sp_makewebtask存贮过程来执行的SQL语句。其结果数据将用于产生静态页面。同IDC技术相类似,此参数中也允许存在多个查询。
■    fixedfont:指明是否使用固定宽度字体(为1时使用,为0时不使用。默认为1)。
■    bold:是否使用加粗字体。(为1时使用,为0时不使用。默认为0)
■    italic是否使用斜体字体。(为1时使用,为0时不使用。默认为0)
■    colheaders:是否显示字段名(结果数据集合的列标题)。(为1时显示,为0时不显示。默认为1)
■    lastupdated:是否在页面中显示文件的创立时间。(为1时显示,为0时不显示。默认为1)
■    HTMLHeader:页面标题的显示格式。其取值为1~6,对应于HTML语言的H1~H6。
■    Username:指明用来执行SQL语句的用户,默认为连接时的用户(在本应用实例中默认用户为editer)。
■    Dbname:指明在哪个数据库上运行SQL语句。默认为当前数据库。
■    Templatefile:指明模板文件(同IDC技术中的htx文件的作用相类似)的所在路径和文件名。如果使用了模板文件,其他格式控制参数将不再起作用(比如bold、italic和fixedfont等参数)。
■    Webpagetitle:指明页面文件的标题,等效于HTML语句中<TITLE> </TITLE>之间的字符。
■    Resultstitle:用来指定在页面中返回结果数据集之前显示的标题。默认为Query Results。
■    URL:用于指明页面中包含的超链接。必须同reftext参数结合使用。
■    Reftext:URL参数中超链接地址的名称。也就是HTML文件中连接地址的文字部分。如下面的例子中的"文章查询"几个字。
<a HREF="search.idc?" >文章查询</a>
■    table_urls:指明是否使用一个查询来动态的生成页面中的超链接列表(为1时使用,为0时不使用。默认为0)。如果此参数为1时,则不能同时指定URL和reftext参数,且必须同时指定url_query参数。
■    url_query:用来产生超链接列表的查询语句。其返回的第一个字段为链接地址,第二个字段为此地址的名称。
■    whentype:用于指明任务执行的时机。其取值及含义如下:
n    1:系统默认值。指明立即建立任务并执行它建立导出页面。并在执行之后将任务删除。
n    2:建立任务,但并不立即执行它。其执行的日期和时间将分别由targetdate和targettime参数(可选参数)来决定。如果不指明targettime参数,任务将在由targetdate指明的那天的凌晨0点执行。
n    3:每周的n天执行任务,其首次执行时间分别由targetdate和targettime参数(可选参数)来决定。而在此之后则由dayflages参数来指明将会在一周中的哪些天执行此任务。
n    4:每n分钟、小时、天或者周执行一次任务。其首次执行时间分别由targetdate和targettime参数(可选参数)来决定。而时间的间隔分别由numunits和unittype参数来指明。
n    5:由用户来决定何时执行此任务。此任务会被创建但没有进行调度。用户可以通过执行sp_runwebtask来执行此任务。
n    6:指明立即建立任务并执行它建立导出页面。并在执行之后在分别由targetdate和targettime参数(可选参数)指明的日期和时刻执行。
n    7:同3相类似,但它会在任务建立时立即执行一次,所以不需要targetdate参数。
n    8:同4相类似,但它会在任务建立时立即执行一次,所以不需要targetdate参数。
n    9:同5相类似,但它会在任务建立时立即执行一次。
n    10:在任务建立时立即执行一次,以后则在由datachg参数中指定的数据发生变化时执行。
■    targetdate:指明任务执行的日期(如whentype参数为2、3、4、6时),其格式为yyyymmdd。
■    targettime:指明任务执行的时间,其格式为HHMMSS。其默认值为凌晨0点。
■    dayflags:用于指明任务在一周中的哪天执行(如whentype参数为3或7时)。其取值为1、2、4、8、16、32、64分别对应于星期天、星期一、星期二、星期三、星期四、星期五、星期六。如果要指明在每周的多个日子中执行任务,则将它们所代表的值相加即可。比如要想在星期一和星期四执行任务,则此参数等于18(2+16=18)。
■    numunits:同unittype参数一起用于指定任务的执行频度(如whentype参数为4或8时)。其取值范围为1~255。
■    unittype:用于指明numunits参数的时间单位。其取值可以分别为1、2、3、4,对应于小时、天、周和分钟。比如当numunits参数为1,unittype参数为2时,任务将在每两个小时执行一次。
■    procname:指明所建立的任务的名称。
■    maketask:指明是否建立一个任务来执行导出静态页面的存贮过程。其取值可以分别如下:
0:建立一个不加密的存贮过程,但不创建执行该存贮过程的任务。
1:建立一个加密的存贮过程,并创建执行该存贮过程的任务。
2:建立一个不加密的存贮过程,并创建执行该存贮过程的任务(此值为系统默认值)。
■    rowcnt:指明返回SQL语句结果数据集中记录的最大数目。默认为返回所有的记录。
■    tabborder:指明是否在页面中的数据画出表框线。其取值可以为1(画线)或0(不画线),默认值为1。
■    singlerow:指明是否为每个返回的记录都建立一个页面文件。其取值可以为1(建立单独的文件)或0(不为每个记录单独建立文件),默认值为0。
■    blobfmt:指明是否将查询返回的结果集中的ntext和image数据类型的字段独立的放到一个页面文件之中并在主页面文件中加入指向这些文件的超链接。此参数的默认为空。其格式如下:
"%n% FILE=output_filename TPLT=template_filename URL=url_link_name..."
其中n为ntext或image字段在返回结果中的序号。output_filename为ntext和image字段输出文件名;template_filename为其模板文件名;url_link_name为主页面文件中连接到此文件的超链接的名字。
■    nrowsperpage:指明每个页面文件中最多的记录数目。其默认值为0,即所有的返回结果记录集都将放在一个页面文件之中。当查询所返回的记录数目多于此参数指定的值时,将会产生其他的页面文件来放置超出的记录。而且这些页面文件之中包含相互的超链接地址(第一页、前一页、后一页、最后一页),可以点击这些超链接来完成在这些页面之间的跳转。
■    datachg:用来指明当表中哪些字段变化时,执行此任务来产生新的页面文件(当whentype参数为10时)。其语法格式如下:
{TABLE= name [COLUMN=name]}[,...]
■    charset:指明页面文件使用的字符集。对于中文,其值应该为'gb2312'。
■    codepage:指明页面文件使用的代码页。对于中文,其值应该为936。
对于各种文字charset和codepage的取值如下(可以通过运行sp_enumcodepages存贮过程来得到下面的列表):
Code Page   Character Set                             语种
708         ASMO-708                         阿拉伯字符 (ASMO 708)
720         DOS-720                           阿拉伯字符 (DOS)
28596       iso-8859-6                          阿拉伯字符 (ISO)
1256        windows-1256                       阿拉伯字符 (Windows)
1257        windows-1257                       波罗的海字符 (Windows)
852         ibm852                            中欧字符 (DOS)
28592       iso-8859-2                          中欧字符 (ISO)
1250        windows-1250                       中欧字符 (Windows)
936         gb2312                             简体中文 (GB2312)
52936       hz-gb-2312                          简体中文 (HZ)
950         big5                                繁体中文 (Big5)
866         cp866                               西里尔字符 (DOS)
28595       iso-8859-5                           西里尔字符 (ISO)
20866       koi8-r                               西里尔字符 (KOI8-R)
21866       koi8-ru                              西里尔字符 (KOI8-U)
1251        windows-1251                        西里尔字符 (Windows)
28597       iso-8859-7                           希腊字符 (ISO)
1253        windows-1253                        希腊字符 (Windows)
862         DOS-862                            希伯来字符 (DOS)
38598       iso-8859-8-i                          希伯来字符 (ISO-Logical)
28598       iso-8859-8                            希伯来字符 (ISO-Visual)
1255        windows-1255                        希伯来字符 (Windows)
50932       _autodetect                           日语 (自动选择)
51932       euc-jp                               日语 (EUC)
932         shift_jis                              日语 (Shift-JIS)
949         ks_c_5601-1987                        朝鲜语
874         windows-874                           泰语 (Windows)
1254        iso-8859-9                             土耳其字符 (Windows)
65001       utf-8                                  Unicode (UTF-8)
1258        windows-1258                          越南字符 (Windows)
1252        iso-8859-1                             西欧字符
    同静态页面导出相关的还有以下存贮过程:
    sp_runwebtask:用于执行由sp_makewebtask建立的静态页面导出任务。其语法结构如下:
    sp_runwebtask [][@procname =] 'procname']
    [,][@outputfile =] 'outputfile'
    其中procname参数指明要执行的静态页面导出任务的名字,而outputfile则指明任务的输出文件。比如要运行我们在上面建立的静态页面导出任务,就可以通过下面的语句来完成:
    EXEC sp_runwebtask 'test Web Page'
    sp_dropwebtask:删除建立的静态页面导出任务。其语法结构如下:
sp_dropwebtask {[@procname =] 'procname' | [,@outputfile =] 'outputfile'}
    其中procname参数指明要删除的静态页面导出任务的名字。而outputfile则指明要删除的导出文件。如果要删除我们在上面建立的静态页面导出任务,则通过下面的语句来完成:
EXEC sp_dropwebtask 'test Web Page', 'D:\test\cbb\ttt.htm'