SQLServer分页查询存储过程

项目中用到的SQLServer分页查询存储过程。

【存储过程】

create PROCEDURE prcPageResult

-- 获得某一页的数据 --

@currPage int = 1,                         --当前页页码 (即Top currPage)

@showColumn varchar(2000) = ‘*‘,           --需要得到的字段 (即 column1,column2,......)

@strCondition varchar(2000) = ‘‘,          --查询条件 (即 where condition......) 不用加where关键字

@ascColumn varchar(100) = ‘‘,              --排序的字段名 (即 order by column asc/desc)

@bitOrderType bit = 0,                     --排序的类型 (0为升序,1为降序)

@pkColumn varchar(50) = ‘‘,                --主键名称

@pageSize int = 20,                        --分页大小

@RecordCount int output --返回总行数

AS

BEGIN -- 存储过程开始

-- 该存储过程需要用到的几个变量 --

DECLARE @strTemp varchar(1000)

DECLARE @strSql varchar(4000)                   --该存储过程最后执行的语句

DECLARE @strSql01 varchar(4000)

DECLARE @strOrderType varchar(1000)      --排序类型语句 (order by column asc或者order by column desc)

BEGIN

IF @bitOrderType = 1   -- bitOrderType=1即执行降序

BEGIN

SET @strOrderType = ‘ ORDER BY ‘+@ascColumn+‘ DESC‘

SET @strTemp = ‘<(SELECT min‘

END

ELSE

BEGIN

SET @strOrderType = ‘ ORDER BY ‘+@ascColumn+‘ ASC‘

SET @strTemp = ‘>(SELECT max‘

END

IF @currPage = 1    -- 如果是第一页

BEGIN

IF @strCondition != ‘‘

SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+‘ ‘+@showColumn+‘ FROM dbo.DemoData ‘+

‘ WHERE ‘+@strCondition+@strOrderType

ELSE

SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+‘ ‘+@showColumn+‘ FROM dbo.DemoData ‘+@strOrderType

END

ELSE    -- 其他页

BEGIN

IF @strCondition !=‘‘

SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+‘ ‘+@showColumn+‘ FROM dbo.DemoData ‘+

‘ WHERE ‘+@strCondition+‘ AND ‘+@pkColumn+@strTemp+‘(‘+@pkColumn+‘)‘+‘ FROM (SELECT TOP ‘+STR((@currPage-1)*@pageSize)+

‘ ‘+@pkColumn+‘ FROM dbo.DemoData ‘+@strOrderType+‘) AS TabTemp)‘+@strOrderType

ELSE

SET @strSql = ‘SELECT TOP ‘+STR(@pageSize)+‘ ‘+@showColumn+‘ FROM dbo.DemoData ‘+

‘ WHERE ‘+@pkColumn+@strTemp+‘(‘+@pkColumn+‘)‘+‘ FROM (SELECT TOP ‘+STR((@currPage-1)*@pageSize)+‘ ‘+@pkColumn+

‘ FROM dbo.DemoData ‘+@strOrderType+‘) AS TabTemp)‘+@strOrderType

END

END

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

EXEC (@strSql)

END  -- 存储过程结束

------------------------------------------------

GO

【调用方式】

DECLARE @RecordCount int

exec prcPageResult 1,‘*‘,‘‘,‘id‘,1,‘id‘,10,@RecordCount out

SELECT @RecordCount

---

DECLARE @RecordCount int

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

SELECT @RecordCount

SQLServer分页查询存储过程,布布扣,bubuko.com

时间: 2024-10-16 17:37:40

SQLServer分页查询存储过程的相关文章

SQLserver分页查询实例

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID

sqlserver分页查询

SQL Server 2005引入的新方法. SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY keyField DESC) AS rowNum, * FROM tableName) AS t WHERE rowNum > start AND rowNum <= end 其中: keyField为表tableName的一个字段(最好是主键): tableName为查询的表名: DESC可以按需换为ASC: start为要取的结果集的起始记录 en

高效的SQLSERVER分页查询的几种示例分析

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 1 SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000

高效的SQLSERVER分页查询(推荐)

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 代码如下: [sql] view plaincopyprint? SELECT TOP 30 * FROM ARTICLE WH

真正高效的SQLSERVER分页查询(多种方案)

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: 复制代码代码如下: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TO

高效的SQLSERVER分页查询(转载)

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN(SELECT TOP 45000 ID

ADO调用分页查询存储过程

一.分页存储过程 ----------使用存储过程编写一个分页查询----------------------- set nocount off  --关闭SqlServer消息 --set nocount on  --开启SqlServer消息 gocreate proc usp_getMyStudentsDataByPage --输入参数@pagesize int=7,--每页记录条数@pageindex int=1,--当前要查看第几页的记录 --输出参数@recordcount int

高效的SQLSERVER分页查询

Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2 第一种方案.最简单.普通的方法: SELECT TOP 30 * FROM ARTICLE WHERE ID NOT IN (SELECT TOP 45000 I

【原创】SQL分页查询存储过程

1 ------------------------------------- 2 -----作者:张欣宇 3 -----时间:2013-06-28 4 -----简介:根据参数和条件分页查询 5 ------------------------------------- 6 Create proc [dbo].[Up_PagingQueryByParameter] 7 ( 8 ----- 表名或能查询到结果的SQL语句{SQL语句左右必须有括号例:(select * from tbl1)} 9