SQL 2005-2008 存储过程分页程序 ROW_NUMBER()

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  fangjun
-- Create date: 2010-9-21
-- Description: SQL 2005-2008 存储过程分页程序
-- exec pages 表名,主键,字段名,开始页码,页大小,Where条件,主键排序DESC/ASC
-- =============================================
CREATE PROCEDURE pages
(
 @Tables varchar(1000),       --表名
 @PK varchar(100),            --主键
 @Fields varchar(1000) = '*', --字段名
 @Pageindex int = 1,          --开始页码
 @PageSize int = 10,          --页大小
 @Filter varchar(1000) = '',  --Where条件,不能为null
 @Sort varchar(200) = ''      --排序字段, 不能为null
)
AS
BEGIN
 --------------------------
 Declare @sql varchar(500);
 Declare @count int;
 --------------------------
 If Not IsNull(@Sort,'') = ''
  begin
   Set @Sort = 'DESC'
  end
  
 If Not IsNull(@Filter,'') = ''
  begin
   Set @Filter = 'where '+@Filter
  end
 --------------------------
 begin
 
  set @sql = 'WITH [tempTable] AS (SELECT '+@Fields+''+
       ', ROW_NUMBER() OVER (ORDER BY '+@PK+' '+@Sort+') AS ''RowNumber'' '+
       'FROM '+@Tables+' '+@Filter+') SELECT '+@Fields+' FROM [tempTable] WHERE '+
       'RowNumber BETWEEN '+convert(varchar(20),@Pageindex)+' AND '+
       convert(varchar(20),@PageSize)
 end   
 --------------------------
 Exec (@sql)
 --------------------------
 Print @count
END


GO

posted @ 2011-10-13 21:34  半调子白开水  阅读(358)  评论(0)    收藏  举报