最近在做一个网站的排行榜页面,因为排行需要对数据库表进行排序操作,可能会比较耗时,因此我想通过静态页面的方法来显示排行榜页面,每隔一小时刷新一次。
我想到了用SQL Server的Web助手的静态页发布和作业调度功能,正好可以满足我的需求。在使用的过程中我发现:模板中带有中文字符的时候生成的页面数据插入位置不正确,而且会丢失一些内容,我想这和SQL Server内部处理双字节汉字的问题有关,请问有什么方法可以解决吗?
我执行 EXEC sp_runwebtask @procname = N'排行榜' 操作时出现以下信息:服务器: 消息 16879,级别 11,状态 1,过程 sp_runwebtask,行 26
SQL Web 助手: 内部错误。未能从 Unicode 转换为指定的代码页。

解决方案 »

  1.   

    --建立环境:
    if object_id('csdn') is not null drop table csdn
    if object_id('p_csdn') is not null drop proc p_csdn
    create table csdn(id int identity(1,1),title nvarchar(100),url nvarchar(200),memo nvarchar(200))
    go
    create proc p_csdn as select top 2 * from csdn
    go
    insert csdn values(N'分最高的贴',N'http://expert.csdn.net/Expert/TopicView1.asp?id=1561946',N'480分,只有总版主才能这么放分')
    insert csdn values(N'回贴次数最多的贴',N'http://expert.csdn.net/Expert/TopicView1.asp?id=1344408',N'P3 800 + 512M + win2kas 也打不开太大了!你要有思想准备 (2469个回帖)')
    insert csdn values(N'三星回复最多的贴',N'http://expert.csdn.net/Expert/TopicView1.asp?id=1305645',N'是那个智者弄出来的杰作')
    insert csdn values(N'最歪的贴',N'http://expert.csdn.net/Expert/TopicView3.asp?id=1474251',N'会报一个错,但可以打开,不知是什么时候弄出来的')
    go
    一、HTML :
    1、普通网页报表例:(具体参数可参考SQLServer联机)
       exec sp_makewebtask 'c:\查询输出.html','select * from csdn exec p_csdn',@lastupdated=0,@resultstitle='两个结果集'
    2、普通带超连结的报表例:(@resultstitle不要标题是两个空格,后面的@url_query参数中的查询,第一列是地址,第二列是描述)
       exec sp_makewebtask 'c:\带超链接.html','exec p_csdn',@lastupdated=0,@resultstitle='  ',@table_urls=1,@url_query='select url,title from csdn' --,@charset='gb2312'
    3、定时网页监控:(@whentype是调度类型,@targetdate是生成页的日期,@numunits=周期,@unittype=对应周期单位)
       declare @now int set @now=cast(convert(char(8),getdate(),112) as int)
       exec sp_makewebtask 'c:\当前会话.html','exec sp_who2 exec master..xp_cmdshell ''net session''',@whentype=4,@targetdate=@now,@numunits=1,@unittype=1,@resultstitle='机器当前用户和进程的信息及机器会话',@webpagetitle='当前会话'
       注意:
         1、用这个来删除web作业:  sp_dropwebtask null,'c:\当前会话.html'
         2、你要启动SQLSERVERAGENT服务。
    4、使用模版:
      建立例子模版:在C:\下新建内容为下面的一“模版.htp”
        <html><title>模版例子</title><body><table border=0 cellspacing=1 cellpadding=5 bgcolor="#CCCCCC"><tr><td><%insert_data_here%></td></tr></table></body></html>
      exec sp_makewebtask 'c:\模版实例.html','select * from csdn',@templatefile='c:\模版.htp',@lastupdated=0,@resultstitle='  ',@charset='gb2312'
    EXEC sp_enumcodepages --查看代码页
      

  2.   

    你说的这些我都知道,但是我要告诉你,还是不行。出错的原因与模板的内容有关,比如以下模板就会出错:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-CN">
    <head>
    <meta http-equiv="Content-Type" content="application/xhtml-xml; charset=gb2312" />
    <meta http-equiv="Content-Language" content="zh-CN" />
    </head>
    <body>
    <ul class="TopMenu">
    <li><a href="top1.htm">总点击排行</a></li>
    <li><a href="top2.htm">月点击排行</a></li>
    <li><a href="top3.htm">周点击排行</a></li>
    <li><a href="top4.htm">总评分排行</a></li>
    <li><a href="top5.htm">月评分排行</a></li>
    <li><a href="top6.htm">周评分排行</a></li>
    <li><a href="top7.htm">总推荐排行</a></li>
    <li><a href="top8.htm">月推荐排行</a></li>
    <li><a href="top9.htm">周推荐排行</a></li>
    <li><a href="top10.htm">作者排行</a></li>
    <li><a href="top11.htm">总字数排行</a></li>
    <li><a href="top12.htm">新书点击排行</a></li>
    <li><a href="top13.htm">最新更新作品</a></li>
    <li><a href="top14.htm">最新入站作品</a></li>
    <li><a href="top15.htm">最新完结作品</a></li>
    </ul>
    <div id="TopRightFrame">
    <%insert_data_here%>
    </div>
    </body>
    </html>但是去掉第一行
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
    就不出错。
    然而我的真实模板不是这么简单,我将第一行去掉还是不行总之一句话,非常诡异。还有,即使用最简单的模板,只要包含汉字,即使执行的时候不出错,但是打开生成的html文件可以看到最后会多出一些不可见字符。。有办法彻底解决吗?
      

  3.   

    这个问题。暂时得到的答案是SQL助手好象有这个问题某人建议写成存储过程,打开静态页面进行缓冲。。这个问题没法去newsgroup上问,老外不用中文,FT