日期:2014-05-18  浏览次数:20413 次

小弟不才,想请教各位一个存储过程分页的问题
小弟最近开发一个流量统计系统,涉及数据为千万级别,用了SQL   SERVER存储过程做的!现在遇到几个难题想请教各位,真心感谢!

存储过程如下(来源网上某位高手的),我自己改动了下,因为有三个条件是每次查询差不多都用到的,就一并写进去了!


CREATE   PROCEDURE   GetRecordPage
        @tblName             varchar(255),               --   表名
        @fldName             varchar(255),               --   字段名
        @PageSize           int,                       --   页尺寸
        @PageIndex         int,                         --   页码
        @OrderType         bit,                         --   设置排序类型,   非   0   值则降序
        @strWhere           varchar(2000),     --   查询条件   (注意:   不要加   where)
        @fleString             varchar(2000),       ---取出的字段
        @GetUserId     int,       --我加的参数   用户ID号
        @GetGameId   int,         --我加的参数   游戏ID号
        @GetSiteId   int           --我加的参数   站点ID号
 
AS

declare   @strSQL       varchar(6000)               --   主语句
declare   @strTmp       varchar(1000)               --   临时变量
declare   @strOrder   varchar(500)                 --   排序类型


/***以下部分是我改的
当用户ID不为空时,原始的strwhere(查询条件   不带where的)语句   连接上我加上的条件

if   @GetUserId   !=   ' '
        set   @strWhere   =   @strWhere   +     '   and   come_userid   =     '   +@GetUserId

if   @GetGameId   !=   ' '
        set   @strWhere   =   @strWhere   +     '   and   come_gameid   =     '   +@GetGameId

if   @GetSiteId   !=   ' '
        set   @strWhere   =   @strWhere   +     '   and   come_siteid   =     '   +@GetSiteId
**/


if   @OrderType   !=   0
begin
        set   @strTmp   =   ' <(select   min '
        set   @strOrder   =   '   order   by   [ '   +   @fldName   +   ']   desc '
end
else
begin
        set   @strTmp   =   '> (select   max '
        set   @strOrder   =   '   order   by   [ '   +   @fldName   + ']   asc '
end

set   @strSQL   =   'select   top &nb