加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer采用分页的方式查询数据

发布时间:2020-12-12 15:54:42 所属栏目:MsSql教程 来源:网络整理
导读:set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO /* --下面的存储过程不仅含有分页方案,还会根据页面传来的参数来确定是否进行数据总数统计。 -- 获取指定页的数据 ??? 2008-05-13 yych */ ALTER PROCEDURE [grid].[APrcQueryData] @tblName varchar(255),-
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO /* --下面的存储过程不仅含有分页方案,还会根据页面传来的参数来确定是否进行数据总数统计。 -- 获取指定页的数据 ??? 2008-05-13 yych */ ALTER PROCEDURE [grid].[APrcQueryData] @tblName varchar(255),-- 表名 @strGetFields varchar(1000) = '*',-- 需要返回的列,可以是以逗号分隔的多列 @fldNameOrderBy varchar(255)='',-- 排序的字段名 @PageSize int = 100,-- 页尺寸,每页上的记录数 @PageIndex int = 1,-- 页码 @doCount bit = 0,-- 是否返回记录总数,非 0 值则只返回记录总数,不返回记录集 @OrderType bit = 0,-- 设置排序类型,默认值是升序,非 0 值则降序 @strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where) AS declare @strSQL varchar(5000) -- 主语句 declare @strTmp varchar(110) -- 临时变量 declare @strOrder varchar(400) -- 排序类型 if @doCount != 0 begin ??? if @strWhere !='' ??? ??? set @strSQL = 'select count(*) as Total from [' + @tblName + '] where '+@strWhere ??? else ??? ??? set @strSQL = 'select count(*) as Total from [' + @tblName + ']' end --以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况 else begin ??? if @OrderType != 0 ??? begin ??? ??? set @strTmp = '<(select min' ??? ??? set @strOrder = ' order by [' + @fldNameOrderBy +'] desc' ??? --如果@OrderType不是0,就执行降序,这句很重要! ??? end ??? else ??? begin ??? ??? set @strTmp = '>(select max' ??? ??? set @strOrder = ' order by [' + @fldNameOrderBy +'] asc' ??? end ??? if @PageIndex = 1 ??? begin ??? ??? if @strWhere != '' ??? ??? ??? set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' + @tblName + '] where ' + @strWhere + ' ' + @strOrder ??? ??? else ??? ??? ??? set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['+ @tblName + '] '+ @strOrder ??? ??? --如果是第一页就执行以上代码,这样会加快执行速度 ??? ??? end ??? else ??? begin ??? ??? --以下代码赋予了@strSQL以真正执行的SQL代码 ??? ??? set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' ??? ??? + @tblName + '] where [' + @fldNameOrderBy + ']' + @strTmp + '(['+ @fldNameOrderBy + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['+ @fldNameOrderBy + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'+ @strOrder ??? ??? if @strWhere != '' ??? ??? set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from [' ??? ??? + @tblName + '] where [' + @fldNameOrderBy + ']' + @strTmp + '([' ??? ??? + @fldNameOrderBy + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' ??? ??? + @fldNameOrderBy + '] from [' + @tblName + '] where ' + @strWhere + ' ' ??? ??? + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder ??? end end --print @strSQL exec (@strSQL)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读