您的位置:首页 > 数据库

Sql2000 版通用分页存储过程

2008-12-18 10:38 274 查看
 CREATE PROCEDURE  sys_QuickSortPaging





    @Table nvarchar(4000),                            --表名(必须)


    @PrimaryKeyField nvarchar(50),             --表的主键字段


    @Field nvarchar (4000)='*',                      --需要返回字段名(必须)        


    @Where nvarchar(1000)=NULL,             --Where 条件(可选)


    @GroupBy nvarchar(1000) = NULL,     --分组


    @OrderBy nvarchar(1000)=NULL,        --排序用到的字段()


    @PageNumber int = 1,                              --要返回的页(第X页) (默认为第一页)


    @PageSize int = 10,                                  --每页大小(默认为5)


    @RecordCount int output                        --返回记录总数


)


AS 


    SET NOCOUNT ON


    DECLARE @SortTable nvarchar(100)


    DECLARE @SortName nvarchar(100)


    DECLARE @strSortColumn nvarchar(200)


    DECLARE @Operator nvarchar(50)


    DECLARE @Type varchar(100)


    DECLARE @Prec int




    IF @OrderBy IS NULL OR @OrderBy = ''


    SET @OrderBy =  @PrimaryKeyField    


    


    /**//* 获取用于定位的字段*/                


    IF CHARINDEX('DESC',@OrderBy)>0                        


        BEGIN


            SET @strSortColumn = REPLACE(@OrderBy, 'DESC', '')


            SET @Operator = '<='


        END


    ELSE


        BEGIN


            IF CHARINDEX('ASC', @OrderBy) = 0


            SET @strSortColumn = REPLACE(@OrderBy, 'ASC', '')


            SET @Operator = '>='


        END


    


    IF CHARINDEX('.', @strSortColumn) > 0                        


        BEGIN


            SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn))


            SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) + 1, LEN(@strSortColumn))


        END


    ELSE


        BEGIN


            SET @SortTable = @Table


            SET @SortName = @strSortColumn


        END




    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 nvarchar) + ')'




    DECLARE @strStartRow nvarchar(50)


    DECLARE @strPageSize nvarchar(50)


    DECLARE @strWhere nvarchar(1000)


    DECLARE @strWhereAnd nvarchar(1000)


    DECLARE @strGroupBy nvarchar(1000)




    IF  @PageNumber < 1


    SET @PageNumber = 1


    


    SET @strPageSize = CONVERT (nvarchar(50), @PageSize)


    SET @strStartRow = CONVERT ( nvarchar(50), (@PageNumber - 1)*@PageSize + 1)


    


    IF @Where IS NOT NULL AND @Where !=''


    BEGIN


        SET @strWhere = ' WHERE '+ @Where 


        SET @strWhereAnd= ' AND ' + @Where 


    END


    ELSE


    BEGIN


        SET @strWhere =  ''


        SET @strWhereAnd=''


    END


    


    IF @GroupBy IS NOT NULL AND @GroupBy != ''


    BEGIN


        SET @strGroupBy = ' GROUP BY ' + @GroupBy


    END


    ELSE


    BEGIN


        SET @strGroupBy = ''


    END




    DECLARE @strSQL nvarchar(4000)


    SET @strSql= ' SELECT  @RecordCount = Count (*)  FROM ' + @Table + @strWhere + ' '  + @strGroupBy


    EXEC   sp_executesql   @strSql,N'@RecordCount   int   OUTPUT',@RecordCount   OUTPUT--计算总页数   




    EXEC


        ( 


        '


        DECLARE @Sort ' + @Type + '


        SET ROWCOUNT ' + @strStartRow + '


        SELECT  @Sort = ' + @strSortColumn + '  FROM ' + @Table + @strWhere + ' '  + @strGroupBy + ' ORDER BY ' + @OrderBy + ' 


        SET ROWCOUNT ' + @strPageSize + ' 


        SELECT '+@Field+'  FROM ' + @Table + ' WHERE ' + @strSortColumn  + @Operator  + ' @Sort ' + @strWhereAnd + ' '  + @strGroupBy + ' ORDER BY ' +  @OrderBy


        )


GO


SET QUOTED_IDENTIFIER OFF 


GO


SET ANSI_NULLS ON 


GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储 sql table null