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

【存储过程】

create PROCEDURE prcPageResult

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

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

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

@strCondition varchar(2000) = '',          --查询条件 (即 where condition......) 不用加wherekeyword

@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分页查询存储过程的更多相关文章

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

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

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

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  3. SQLserver分页查询实例

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

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

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  5. 高效的SQLSERVER分页查询

    Sqlserver数据库分页查询一直是Sqlserver的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询 ...

  6. ADO调用分页查询存储过程

    一.分页存储过程 ----------使用存储过程编写一个分页查询----------------------- set nocount off --关闭SqlServer消息 --set nocou ...

  7. SQLSERVER分页查询

    转:http://blog.csdn.net/qiaqia609/article/details/41445233   Sqlserver数据库分页查询一直是Sqlserver的短板,   第一种方案 ...

  8. SQLServer分页查询笔记

    学习SqlServer到现在快两年了吧,分页查询总是忘了看笔记,看了又忘.之前用的分页都是row_number函数的方式,背不住...直到今天,看到别人写的另一种分页写法,看似比row_number简 ...

  9. Oracle/MySql/SQL Sqlserver分页查询

    简述 简单概括一下Oracle,MySql,SQL Sqlserver这三个数据库的分页查询语句. Oracle分页查询 例:每页显示两条数据,现在要查询第二页,也就是第3-4条数据. 查询语句: s ...

随机推荐

  1. vim: 字符串替换

    :s/str1/str2/ 替换当前行第一个 str1 为 str2:s/str1/str2/g 替换当前行所有 str1 为 str2 ( 注意,  s/xx/xxx/g 语句从s开始,中间的空格视 ...

  2. Android 开发笔记 “SQLite”

    SQLite 入门与分析 1.SQLite介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分.正与数据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源, ...

  3. eclipse 查看快捷键

    无意中发现,ctrl+shift+L 能打开快捷键窗口

  4. uoj #2 【NOI2014】起床困难综合症 贪心+位运算

    题目链接 给出n个数, 每个数有特定的一种操作, &|^三种, 给出一个m, 初始值属于[0,m],选定一个初始值, 使所有操作做完之后的值最大, 输出这个最大值. 1, 从最高位贪心, 如果 ...

  5. spoj 3871 gcd extreme

    题目大意给出一个n,求sum(gcd(i,j),<i<j<=n); 可以明显的看出来s[n]=s[n-]+f[n]; f[n]=sum(gcd(i,n),<i<n); 现 ...

  6. python yaml使用

    YAML Ain't Markup Language 和GNU一样,YAML是一个递归着说“不”的名字.不同的是,GNU对UNIX说不,YAML说不的对象是XML. YAML不是XML. 为什么不是X ...

  7. C++数据结构之图

    图的实现是一件很麻烦的事情,很多同学可能在学数据结构时只是理解了图的基本操作和遍历原理,但并没有动手实践过.在此,我说说我的实现过程. 首先,在草稿纸上画一个图表,这里是有向图,无向图也一样,如下: ...

  8. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...

  9. 浏览器与服务器间的交互(客服端 <---> 服务器)

    浏览器与服务器间的交互(客服端 <---> 服务器) 请求--->处理--->响应 对类HttpContext 内部成员的使用 例如 :Request .Response .  ...

  10. memcache 在php存取中的应用

    当用户刷新网页或有大量用户访问网站时,就会产生大量数据库查询进程,这不但拖慢了网页打开速度,同时也给服务器带来了很大压力. 作为php菜鸟,今天刚刚接触到了 memcache 这个东东,于是自己跟着文 ...