WEB开发网
开发学院数据库MSSQL Server 对任意select语句进行分页的通用存储过程(SQL2005... 阅读

对任意select语句进行分页的通用存储过程(SQL2005)

 2010-10-01 10:24:16 来源:WEB开发网   
核心提示:CREATE PROCEDURE [dbo].[usp_ResultWithPage]@fields_Type varchar(1000), --字段列表(带类型),用于@t表变量的字段声明,对任意select语句进行分页的通用存储过程(SQL2005),如:PhotoID int,UserID int,PhotoTi

CREATE   PROCEDURE   [dbo].[usp_ResultWithPage]

@fields_Type varchar(1000),     --字段列表(带类型),用于@t表变量的字段声明,如:PhotoID int,UserID int,PhotoTitle nvarchar(50)
@fieldsInT varchar(500),     --字段列表(不带类型),用于分页部分读取@t表变量的字段,也可使用*代替,但性能会下降,如:PhotoID ,UserID ,PhotoTitle
@selectSrting varchar(2000),     --向@t表变量中读取记录的Select语句,如:SELECT PhotoID ,UserID ,PhotoTitle FROM Photo_Basic

@result_OrderBy varchar(200),     --对分页结果进行排序的字段,如:升序'PhotoID ASC'、降序'PhotoID DESC',注意:如果是降序的话要在selectSrting和此处都加DESC
@pageSize int,     --页尺寸,0表示返回所有行
@currentPage int,     --当前页,首页为1
@IsReCount bit     -- 非0值则返回记录总数

AS
BEGIN

---------------得到表变量@t-------------------------
DECLARE   @strSql   varchar(2000)

SET @strSql = 'DECLARE @t TABLE(' + @fields_Type + ');'
SET @strSql = @strSql + 'INSERT  INTO @t ' + @selectSrting + ';'

--显示表变量的内容
--SET @strSql = @strSql + 'SELECT ' + @fieldsInT + ' FROM @t;'

----------进行分页------------------------------------

IF   @pageSize   =   0
    SET   @strSql  = @strSql +  'SELECT '   +   @fieldsInT  + ' FROM @t ;'
ELSE
    IF   @currentPage   =   1
        SET   @strSql   = @strSql +     'SELECT TOP( ' + Str(@pageSize) + ') ' + @fieldsInT + ' FROM @t ;'
    ELSE
    BEGIN
    SET   @strSql   = @strSql +  'SELECT TOP( ' + Str(@pageSize) + ')  ' + @fieldsInT + '  FROM ( SELECT TOP(' + Str(@pageSize * @currentPage) + ')  ' + @fieldsInT + ' , ROW_NUMBER() OVER (ORDER BY ' + @result_OrderBy + ')'
    SET   @strSql   = @strSql +  ' AS   RowNumber   FROM  @t'
    SET   @strSql   = @strSql +  ' ) AS r WHERE   r.RowNumber   >  ' + Str(@pageSize * (@currentPage - 1)) + ';'

    END

IF @IsReCount != 0
    SET @strSql = 'SELECT COUNT(1) AS Total FROM @t ;'

--RETURN @strSql

EXEC(@strSql)

-----------------------
END

Tags:任意 select 语句

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接