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