设为首页 加入收藏

TOP

sql server 通用分页存储过程(sql sever 2005以上)
2014-11-24 08:26:21 来源: 作者: 【 】 浏览:0
Tags:sql server 通用 存储 过程 sever 2005 以上

create PROCEDURE [dbo].[GetPageChangingTableByRowNumber]
@Field nvarchar(1000),
@TableName nvarchar(100),
@condition nvarchar(1000),--格式为:and (查询条件) 如'and (key=value and key1=value1)'
@OrderField nvarchar(100),
@OrderType int,
@pageindx int,
@PageSize int,
@RecordCount int output --记录的总数
as
BEGIN
--判断是否有排序字段

if(@OrderField is null or ltrim(rtrim(@OrderField))='')
begin
RAISERROR('排序字段不能为空',16,1)
return
end

--组装order语句
declare @temp nvarchar(200)
set @temp=' order by '+@OrderField
if(@OrderType=1)
begin
set @temp=@temp+' asc '
end
else
begin
set @temp=@temp+' desc '
end

--组装查询条件,如果没有查询条件,直接跳过
if(@condition is not null and ltrim(rtrim(@condition))!='')
begin
set @condition='where 1=1'+@condition
end
else
begin
set @condition=''
end

--求记录的总数
declare @Countsql nvarchar(max)
set @Countsql='select @a= count(1) from '+@TableName +' '+@condition
exec sp_executesql @Countsql,N'@a int output',@RecordCount output

print @RecordCount


declare @sql nvarchar(max)

--分页
if(@pageindx=1)
begin
set @sql=' select top '+cast(@pagesize as nvarchar )+' '+ @Field+' from '+@TableName +' '+@condition+' '+@temp
end
else
begin
declare @startNumber int
set @startNumber =(@pageindx-1)*@pagesize
set @sql='select ROW_NUMBER() over('+@temp+') as number, '+@Field+' from '+@TableName+' '+@condition
set @sql='SET ROWCOUNT '+Convert(varchar(4),@PageSize)+'; WITH SP_TABLE AS('+@sql +') SELECT '+@Field+' from SP_TABLE where number>'+CAST(@startNumber as nvarchar)
end
print @sql
exec(@sql)



END



本文来自于博客园 作者suchen

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL数据库重命名 下一篇SQL Server 2012 概况

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis压力测试实战 - (2025-12-27 09:20:24)
·高并发一上来,微服 (2025-12-27 09:20:21)
·Redis 高可用架构深 (2025-12-27 09:20:18)
·Linux 系统监控 的完 (2025-12-27 08:52:29)
·一口气总结,25 个 L (2025-12-27 08:52:27)