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

SQLServer分页查询存储过程

项目中用到的sqlServer分页查询存储过程。@H_502_5@

【存储过程】

create PROCEDURE prcPageResult

-- 获得某一页的数据 -- @H_502_5@ @currPage int = 1,                        --当前页页码 (即Top currPage) @H_502_5@ @showColumn varchar(2000) = '*',          --需要得到的字段 (即 column1,column2,......) @H_502_5@ @strCondition varchar(2000) = '',         --查询条件 (即 where condition......) 不用加where关键字 @H_502_5@ @ascColumn varchar(100) = '',             --排序的字段名 (即 order by column asc/desc) @H_502_5@ @bitOrderType bit = 0,                    --排序的类型 (0为升序,1为降序) @H_502_5@ @pkColumn varchar(50) = '',               --主键名称 @H_502_5@ @pageSize int = 20,                       --分页大小 @H_502_5@ @RecordCount int output --返回总行数 @H_502_5@@H_502_5@@H_502_5@ AS @H_502_5@ BEGIN -- 存储过程开始 @H_502_5@ -- 该存储过程需要用到的几个变量 -- @H_502_5@ DECLARE @strTemp varchar(1000) @H_502_5@ DECLARE @strsql varchar(4000)                   --该存储过程最后执行的语句 @H_502_5@ DECLARE @strsql01 varchar(4000)  @H_502_5@ DECLARE @strOrderType varchar(1000)      --排序类型语句 (order by column asc或者order by column desc) @H_502_5@@H_502_5@@H_502_5@@H_502_5@@H_502_5@ BEGIN @H_502_5@ IF @bitOrderType = 1   -- bitOrderType=1即执行降序 @H_502_5@ BEGIN @H_502_5@     SET @strOrderType = ' ORDER BY '+@ascColumn+' DESC' @H_502_5@     SET @strTemp = '<(SELECT min' @H_502_5@ END @H_502_5@ ELSE @H_502_5@ BEGIN @H_502_5@     SET @strOrderType = ' ORDER BY '+@ascColumn+' ASC' @H_502_5@     SET @strTemp = '>(SELECT max' @H_502_5@ END @H_502_5@@H_502_5@@H_502_5@ IF @currPage = 1    -- 如果是第一页 @H_502_5@ BEGIN @H_502_5@     IF @strCondition != '' @H_502_5@         SET @strsql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+ @H_502_5@             ' WHERE '+@strCondition+@strOrderType @H_502_5@     ELSE @H_502_5@         SET @strsql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+@strOrderType @H_502_5@ END @H_502_5@@H_502_5@@H_502_5@ ELSE    -- 其他页 @H_502_5@ BEGIN @H_502_5@     IF @strCondition !='' @H_502_5@         SET @strsql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+ @H_502_5@         ' WHERE '+@strCondition+' AND '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+ @H_502_5@         ' '+@pkColumn+' FROM dbo.DemoData '+@strOrderType+') AS TabTemp)'+@strOrderType @H_502_5@     ELSE @H_502_5@         SET @strsql = 'SELECT TOP '+STR(@pageSize)+' '+@showColumn+' FROM dbo.DemoData '+ @H_502_5@         ' WHERE '+@pkColumn+@strTemp+'('+@pkColumn+')'+' FROM (SELECT TOP '+STR((@currPage-1)*@pageSize)+' '+@pkColumn+ @H_502_5@         ' FROM dbo.DemoData '+@strOrderType+') AS TabTemp)'+@strOrderType @H_502_5@ END @H_502_5@@H_502_5@ END @H_502_5@@H_502_5@

select @RecordCount=COUNT(*) from dbo.DemoData

EXEC (@strsql) @H_502_5@@H_502_5@@H_502_5@ END  -- 存储过程结束 @H_502_5@ ------------------------------------------------ @H_502_5@

GO

调用方式】

DECLARE @RecordCount int@H_502_5@ exec prcPageResult 1,'*','','id',1,10,@RecordCount out@H_502_5@ SELECT @RecordCount@H_502_5@

---

DECLARE @RecordCount int exec prcPageResult 1,'name=''hugh''',@RecordCount out--存储过程中转义字符为‘,所以name=’hugh'正确的写法应该是'name=''hugh'''而不是'name=/'hugh/'' SELECT @RecordCount

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

相关推荐