您的位置:首页 > 数据库

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

2011-10-13 21:34 886 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: