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] 举报,一经查实,本站将立刻删除。