微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐