Sql2005分页存储过程

/*********************************************************************************
*      Function:  WEB_PageView                                                      
*      Description:                                                              
*             Sql2005分页存储过程                                                                                                         
*       Example:                                                                     
*              WEB_PageView 
*                @Tablename = 'T_shop', 
*                @Returnfields = '*',
*                @PageSize = 5, 
*                @PageIndex = 1, 
*                @Where = '',
*                @OrderBy=N'ORDER BY id desc',@PageCount =0,@RecordCount =0                                                   
*********************************************************************************/
use aiwaimaidb_new3
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[WEB_PageView]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[WEB_PageView2]
GO

SET QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON 
GO

CREATE PROCEDURE dbo.WEB_PageView
    @TableName        NVARCHAR(200),            -- 表名
    @ReturnFields    NVARCHAR(1000) = '*',    -- 需要返回的列 
    @PageSize        INT = 10,                -- 每页记录数
    @PageIndex        INT = 1,                -- 当前页码
    @Where            NVARCHAR(1000) = '',    -- 查询条件
    @OrderBy        NVARCHAR(1000),            -- 排序字段名 最好为唯一主键    
    @PageCount        INT OUTPUT,                -- 页码总数
    @RecordCount    INT OUTPUT                -- 记录总数

--WITH ENCRYPTION AS
AS

--设置属性
SET NOCOUNT ON

-- 变量定义
DECLARE @TotalRecord INT
DECLARE @TotalPage INT
DECLARE @CurrentPageSize INT
DECLARE @StartIndex INT
DECLARE @EndIndex INT

BEGIN
    IF @Where IS NULL SET @Where=N''
    
    -- 记录总数的sql 语句
    DECLARE @countSql NVARCHAR(4000)  
    
    --计算总记录数
    IF @RecordCount IS NULL
        BEGIN
            SET @countSql='SELECT @TotalRecord=Count(*) From '+@TableName+' '+@Where
            EXECUTE sp_executesql @countSql,N'@TotalRecord int out',@TotalRecord OUT
        END
    ELSE
        BEGIN
            SET @TotalRecord=@RecordCount
        END        
    
    --计算总页数
    IF @RecordCount%@PageSize=0
        BEGIN
            SET @TotalPage=@RecordCount/@PageSize
        END
    ELSE
        BEGIN
            SET @TotalPage=(@RecordCount/@PageSize)+1
        END
    
    -- 返回总页数和总记录数
    SET @PageCount=@TotalPage
    SET @RecordCount=@TotalRecord
        
    --计算起始索引和结束索引
    SET @CurrentPageSize=@PageIndex
    SET @StartIndex=(@CurrentPageSize - 1) * @PageSize + 1
    SET @EndIndex=@PageIndex * @PageSize
    
    EXEC    ('SELECT *
            FROM (SELECT ROW_NUMBER() OVER ('+@OrderBy+') AS PageView_RowNo,'+@ReturnFields+'  
            FROM '+@TableName+ ' ' + @Where +' ) AS TempPageViewTable 
            WHERE TempPageViewTable.PageView_RowNo between '+ @startIndex +' and '+ @endIndex)
    
END
RETURN 0
GO

 

posted on 2013-09-12 11:08  woshilee  阅读(245)  评论(0)    收藏  举报

导航