如题!最好把代码复制下,我好放入我的网摘,谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/u/20080507/19/82739F4B-ECFE-429C-99B1-6278CB21EF5A.html
      

  2.   

    简单点的分页控件存储过程。还是看看吴旗娃的分页存储过程吧。应该不会很难
    http://www.webdiyer.com/AspNetPager/default.aspx
      

  3.   


    CREATE PROCEDURE pagination3@tblName   varchar(255),       -- 表名@strGetFields varchar(1000) = '*',  -- 需要返回的列 @fldName varchar(255)='',      -- 排序的字段名@PageSize   int = 10,          -- 页尺寸@PageIndex  int = 1,           -- 页码@doCount  bit = 0,   -- 返回记录总数, 非 0 值则返回@OrderType bit = 0,  -- 设置排序类型, 非 0 值则降序@strWhere  varchar(1500) = ''  -- 查询条件 (注意: 不要加 where)ASdeclare @strSQL   varchar(5000)       -- 主语句declare @strTmp   varchar(110)        -- 临时变量declare @strOrder varchar(400)        -- 排序类型 if @doCount != 0  begin    if @strWhere !=''    set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere    else    set @strSQL = 'select count(*) as Total from ' + @tblName + ']'end  --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况elsebegin if @OrderType != 0begin    set @strTmp = '<(select min'set @strOrder = ' order by [' + @fldName +'] desc'--如果@OrderType不是0,就执行降序,这句很重要!endelsebegin    set @strTmp = '>(select max'    set @strOrder = ' order by [' + @fldName +'] asc'end if @PageIndex = 1begin    if @strWhere != ''       set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder     else     set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['+ @tblName + '] '+ @strOrder--如果是第一页就执行以上代码,这样会加快执行速度endelsebegin--以下代码赋予了@strSQL以真正执行的SQL代码set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder if @strWhere != ''    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '  from ['        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrderend end   exec (@strSQL)GO这个希望对你有帮助
      

  4.   

    SET QUOTED_IDENTIFIER ON 
    GO
    SET ANSI_NULLS ON 
    GO
    ALTER   PROCEDURE usp_PagingLarge
    @TableNames VARCHAR(200),    --表名,可以是多个表,但不能用别名
    @PrimaryKey VARCHAR(100),    --主键,可以为空,但@Order为空时该值不能为空
    @Fields    VARCHAR(200),        --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
    @PageSize INT,            --每页记录数
    @CurrentPage INT,        --当前页,0表示第1页
    @Filter VARCHAR(200) = '',    --条件,可以为空,不用填 where
    @Group VARCHAR(200) = '',    --分组依据,可以为空,不用填 group by
    @Order VARCHAR(200) = ''    --排序,可以为空,为空默认按主键升序排列,不用填 order by
    AS
    BEGIN
    ---------------------------临时变量 start -------------------------------------------------
        DECLARE @SortColumn VARCHAR(200)--排序字段
        DECLARE @Operator CHAR(2)--操作符(>=或<=)
        DECLARE @SortTable VARCHAR(200)--排序表
        DECLARE @SortName VARCHAR(200)
    ---------------------------临时变量 end ---------------------------------------------------------------------------一般条件判断 start --------------------------------------
        IF @CurrentPage<0--如果当前页小于0则显示第一页
           SET @CurrentPage=0
        IF @Fields = '' or @Fields is null --如果输出字段为空或null则输出全部字段
            SET @Fields = '*'
        IF @Filter = ''
            SET @Filter = 'WHERE 1=1'
        ELSE
            SET @Filter = 'WHERE ' +  @Filter
        IF @Group <>''
            SET @Group = 'GROUP BY ' + @Group
    --------------------------一般条件判断 end ------------------------------------------------------------------排序字段判断 start ----------------------------------------
        IF @Order <> ''
    -----------------------排序字段不等于空 start ------------------------------------
        BEGIN
            DECLARE @pos1 INT, @pos2 INT ----临时变量,用来记录","和"."的位置        SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')--把小写或大小写混合通用转换成大写
    ----------------------------------------------IF start -----------------------------
            IF CHARINDEX(' DESC', @Order) > 0--判断是否有" DESC"
                IF CHARINDEX(' ASC', @Order) > 0--判断是否有" ASC"
                BEGIN
                    IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)--判断" DESC"与" ASC"位置的先后
                        SET @Operator = '<='
                    ELSE
                        SET @Operator = '>='
                END
                ELSE
                    SET @Operator = '<='
    ----------------------------------------------IF end -----------------------------
            ELSE
                SET @Operator = '>='
    -----------------------------------------------------------------------------------
            SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')--去掉所有的" ASC"或" DESC",保留排序的字段名        SET @pos1 = CHARINDEX(',', @SortColumn)--记录","位置
            IF @pos1 > 0--有","表示有多个排序字段
                SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)--设置排序字段名,最前面一个
            SET @pos2 = CHARINDEX('.', @SortColumn)--记录"."为位置
            IF @pos2 > 0--有"."表示有多个排序表
            BEGIN
                SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1) --设置排序表名,第一个表
                IF @pos1 > 0--有","表示有多个排序字段
                    SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)--获取排序字段,第一个字段名
                ELSE
                    SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)
            END
            ELSE
            BEGIN
                SET @SortTable = @TableNames
                SET @SortName = @SortColumn
            END
        END
    -----------------------排序字段不等于空 end ------------------------------------
        ELSE
        BEGIN
            SET @SortColumn = @PrimaryKey
            SET @SortTable = @TableNames
            SET @SortName = @SortColumn
            SET @Order = @SortColumn
            SET @Operator = '>='
        END
    -------------------------排序字段判断 end ----------------------------------------    DECLARE @type varchar(50)
        DECLARE @prec int
        SELECT @type=t.name, @prec=c.prec
        FROM sysobjects o 
        JOIN syscolumns c on o.id=c.id
        JOIN systypes t on c.xusertype=t.xusertype
        WHERE o.name = @SortTable AND c.name = @SortName
        IF CHARINDEX('char', @type) > 0
        SET @type = @type + '(' + CAST(@prec AS varchar) + ')'    DECLARE @TopRows INT
        SET @TopRows = @PageSize * @CurrentPage + 1
        EXEC('
            DECLARE @SortColumnBegin ' + @type + '
            SET ROWCOUNT ' + @TopRows + '
            SELECT @SortColumnBegin=' + @SortColumn + ' FROM  ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
            SET ROWCOUNT ' + @PageSize + '
            SELECT ' + @Fields + ' FROM  ' + @TableNames + ' ' + @Filter  + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '    
        ')    
    ENDGO
    SET QUOTED_IDENTIFIER OFF 
    GO
    SET ANSI_NULLS ON 
    GO