分页查询存储过程

1 篇文章 0 订阅
1 篇文章 0 订阅
1:没有实现数据总数(有数据总数请看文章底部)
/*
    分页查询存储过程
    只能用于 MS SQL SERVER 2005及以上版本
    本存储过程没有返回总数据数。基于性能考虑
*/
ALTER PROC GetRecodePaging
(
 @pageSize      int = 20--分页大小
 ,@pageIndex    int = 1--当前第几页
 ,@returnFields varchar(200) --返回字段
 ,@tableName    varchar(30)  --查询表名,可以是视图
 ,@stringWhere  varchar(200) --查询条件
 ,@order        varchar(100) = ' [Id] DESC'--排序
)
AS
BEGIN
DECLARE @strTmp nvarchar(4000)
DECLARE @from int
DECLARE @to   int

set @from = (@pageIndex -1) * @pageSize + 1
--print @from
set @to   = (@pageIndex -1) * @pageSize + @pageSize
--print @to
SET @strTmp = '
WITH tmp AS
(
    SELECT ROW_NUMBER() OVER (ORDER BY ' + @order + ') AS Row ,' + @returnFields + '
    FROM ' + @tableName + '
    WHERE ' + @stringWhere + '
 )
SELECT ' + @returnFields + ' FROM tmp
WHERE [Row] BETWEEN ' + Convert(varchar(10),@from) + ' AND ' + Convert(varchar(10),@to) + '
ORDER BY ' + @order
--print @strTmp
exec sp_executesql @strTmp

END

2:实现了数据总数
/*
	分页查询存储过程
	只能用于 MS SQL SERVER 2005及以上版本 
*/
CREATE PROC [dbo].[GetRecodePaging]
(
 @pageSize      int = 20--分页大小
 ,@pageIndex    int = 1--当前页是第几页
 ,@returnFields varchar(200) --返回字段
 ,@tableName    varchar(30)  --查询表名,可以是视图
 ,@stringWhere  varchar(200) --查询条件
 ,@order        varchar(100) = ' [Id] DESC'--排序
 ,@TotalCount   int output   --数据总数
)
AS
BEGIN
DECLARE @ParmDefinition nvarchar(500); --为输了数据总数定义的参数
DECLARE @strTmp nvarchar(4000)         --构造sql,输出数据
DECLARE @strCount nvarchar(2000)       --构造sql,输出数据总数
DECLARE @from int
DECLARE @to   int 
set @strCount = 'SELECT @out = COUNT(1) FROM ' + @tableName + ' WHERE ' + @stringWhere
SET @ParmDefinition = N'@out varchar(10) OUTPUT'
--查询数据总数
exec sp_executesql @strCount,@ParmDefinition,@out = @TotalCount OUTPUT;

set @from = (@pageIndex -1) * @pageSize + 1
--print @from
set @to   = (@pageIndex -1) * @pageSize + @pageSize
--print @to 
SET @strTmp = '
WITH tmp AS
(
	SELECT ROW_NUMBER() OVER (ORDER BY ' + @order + ') AS Row ,' + @returnFields + '
    FROM ' + @tableName + '
	WHERE ' + @stringWhere + '
 )
SELECT ' + @returnFields + ' FROM tmp 
WHERE [Row] BETWEEN ' + Convert(varchar(10),@from) + ' AND ' + Convert(varchar(10),@to) + '
ORDER BY ' + @order 
--print @strTmp
exec sp_executesql @strTmp

END
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值