加载中…
个人资料
LizBizSoft
LizBizSoft
  • 博客等级:
  • 博客积分:0
  • 博客访问:15,531
  • 关注人气:26
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
谁看过这篇博文
加载中…
正文 字体大小:

分页存储过程

(2011-07-20 08:44:20)
标签:

sql

分页

存储过程

分类: 原创


create  PROCEDURE [dbo].[SELECT_WITH_PAGING]
(
   @strFields varchar(4000),
   @strPK varchar(100),
   @strTables varchar(4000),
   @intPageNo int = 1,
   @intPageSize int = 10,
   @blnGetRecordCount bit = 1,
   @strFilter varchar(8000) = NULL,
   @strSort varchar(8000) = NULL,
   @strGroup varchar(8000) = NULL
)
AS
declare @SQL as nvarchar(4000)
if @intPageNo= 1
begin
 SET @SQL = 'SELECT top '+convert(nvarchar, @intPageSize)+' '+@strFields+' FROM '+@strTables
 --过滤
 if @strFilter is not null
 begin
  SET @SQL = @SQL + ' where '
  SET @SQL = @SQL + @strFilter
 end
 --分组
 if @strGroup is not null
 begin
  SET @SQL = @SQL + ' Group BY '
  SET @SQL = @SQL + @strGroup
 end
 --排序
 if @strSort is not null
 begin
  SET @SQL = @SQL + ' ORDER BY '
  SET @SQL = @SQL + @strSort
 end
 exec sp_executesql @SQL
end
else
begin
 DECLARE @PageLowerBound int
 DECLARE @PageUpperBound int
 SET @PageUpperBound = @intPageNo * @intPageSize
 SET @PageLowerBound = @PageUpperBound - @intPageSize
 
 Create Table #PageIndex
 (
  [IndexId] int IDENTITY (1, 1) NOT NULL,
  [Id] varchar(36)
 )
 SET @SQL = 'INSERT INTO #PageIndex (Id)'
 SET @SQL = @SQL + ' SELECT'
 SET @SQL = @SQL + ' TOP ' + convert(nvarchar, @PageUpperBound)
 SET @SQL = @SQL + ' convert(nvarchar,'
 SET @SQL = @SQL + @strPK
 SET @SQL = @SQL + ') FROM '
 SET @SQL = @SQL + @strTables
 --过滤
 if @strFilter is not null
 begin
  SET @SQL = @SQL + ' where '
  SET @SQL = @SQL + @strFilter
 end
 --分组
 if @strGroup is not null
 begin
  SET @SQL = @SQL + ' Group BY '
  SET @SQL = @SQL + @strGroup
 end
 --排序
 if @strSort is not null
 begin
  SET @SQL = @SQL + ' ORDER BY '
  SET @SQL = @SQL + @strSort
 end
 exec sp_executesql @SQL
 SET @SQL = 'SELECT O.'+@strFields+' FROM '+@strTables+' O, #PageIndex PageIndex WHERE PageIndex.IndexID > '+convert(nvarchar, @PageLowerBound)+' AND O.'+@strPK+' = PageIndex.[Id] ORDER BY PageIndex.IndexID'
 exec sp_executesql @SQL     
               
 drop table #PageIndex
end
IF @blnGetRecordCount = 1
begin
SET @SQL = 'SELECT count(*) as RECORDCOUNT FROM '+@strTables
 --过滤
 if @strFilter is not null
 begin
  SET @SQL = @SQL + ' where '
  SET @SQL = @SQL + @strFilter
 end
 --分组
 if @strGroup is not null
 begin
  SET @SQL = @SQL + ' Group BY '
  SET @SQL = @SQL + @strGroup
 end
 exec sp_executesql @SQL
end


 

0

阅读 收藏 转载 喜欢 打印举报
已投稿到:
  

新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有