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