sql 存储过程分页

CREATE PROC myx_prPageRecordset
@queryStr nvarchar(1000),
@keyField nvarchar (200),
@pageSize int,
@pageNumber int
AS
BEGIN
DECLARE @sqlText AS nvarchar(4000)
DECLARE @sqlTable AS nvarchar(4000)
SET @sqlTable = 'SELECT TOP ' + CAST((@pageNumber + 1) * @pageSize AS varchar(30)) + ' ' + @queryStr
SET @sqlText =
'SELECT TOP ' + CAST(@pageSize AS varchar(30)) + ' * ' +
'FROM (' + @sqlTable + ') AS tableA ' +
'WHERE ' + @keyField + ' NOT IN(SELECT TOP ' +
CAST(@pageNumber * @pageSize AS varchar(30)) + ' ' + @keyField +
' FROM (' + @sqlTable + ') AS tableB)'
EXEC (@sqlText)
END

GO

核心代码
Dim strsql As String
myComm = New SqlClient.SqlCommand("myx_prPageRecordset", myConn)
myComm.CommandType = CommandType.StoredProcedure
myComm.Parameters.Add(New SqlClient.SqlParameter("@queryStr", SqlDbType.NVarChar, 1000))
myComm.Parameters("@queryStr").Value = " * from tbpage order by id DESC"
myComm.Parameters.Add(New SqlClient.SqlParameter("@keyField", SqlDbType.NVarChar, 200))
myComm.Parameters("@keyField").Value = "[id]"
myComm.Parameters.Add(New SqlClient.SqlParameter("@pageSize", SqlDbType.NVarChar, 1000))
myComm.Parameters("@pageSize").Value = PageSize
myComm.Parameters.Add(New SqlClient.SqlParameter("@pageNumber", SqlDbType.NVarChar, 1000))
myComm.Parameters("@pageNumber").Value = myPage - 1

呵呵,执行几W条的代码只需150毫秒左右

建立一个test(id,name,fid)
向test添充几十条数据,使id=1,2,3,4.........(即递增的integer),其他任意
在T-sql Debugger给改存储过程分别传递如下参数:
@queryStr= * from test
@keyField=[ID]
@pageSize=3
@pageNumber=1
问题出来了,看输出结果(注意id):
id name fid
4 kwklover 2
5 kwklover 2
6 kwklover 2
根据传入参数,我们的预期应该是:
id name fid
1 kwklover 2
2 kwklover 2
3 kwklover 2

下面是我参照小春的存储分页写的分页存储过程,可以解决上面的问题:
CREATE Procedure prGetRecordByPage
(
@PageSize int, --每页的记录条数
@PageNumber int, --当前页面
@QuerySql varchar(1000),--部分查询字符串,如* From Test order by id desc
@KeyField varchar(500)
)
AS
Begin

Declare @SqlTable AS varchar(1000)
Declare @SqlText AS Varchar(1000)

Set @SqlTable='Select Top '+CAST(@PageNumber*@PageSize AS varchar(30))+' '+@QuerySql
Set @SqlText='Select Top '+Cast(@PageSize AS varchar(30))+' * From '
+'('+@SqlTable+') As TembTbA '
+'Where '+@KeyField+' Not In (Select Top '+CAST((@PageNumber-1)*@PageSize AS varchar(30))+' '+@KeyField+' From '
+'('+@SqlTable+') AS TempTbB)'
Exec(@SqlText)

End
GO

转载于:https://www.cnblogs.com/xiasp/archive/2006/04/20/379946.html

sql 存储过程分页相关推荐

  1. SQL存储过程分页(通用的拼接SQL语句思路实现)

    多表通用的SQL存储过程分页 案例一: USE [Community] GO/****** Object: StoredProcedure [dbo].[Common_PageList] Script ...

  2. sql 存储过程 分页

    ---存储过程:分页,获得第@endrecord-@num+1条到第@endrecord条记录的研报信息 IF exists (select * from SysObjects where name= ...

  3. 李洪根关于[SQL]对于分页存储过程

    作者:李洪根  微软MVP 1.我个人认为最好的分页方法是: Select top 10 * from table where id>200 写成存储过程,上面的语句要拼一下sql语句,要获得最 ...

  4. SQL Server分页存储过程实践(图解)

    下面来对SQL Server分页存储过程进行一下实做.图解成功的各个步骤. 一 找到大数据量的示例表 分页都是针对大记录数的表:反之有大记录数的表,可能就需要分页.例如银行用户表,就会上千万.下面先做 ...

  5. access下的分页方案(仿sql存储过程)

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  6. [转]Sql Server 分页存储过程

    本文转自: 版权声明:作者:jiankunking 出处:http://blog.csdn.net/jiankunking  本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且 ...

  7. 一个sql server2005分页的存储过程

    --sql server 分页语句 --首先创建一个测试用的表,并且插入一些测试数据 if exists (select * from sysobjects where name='test')    ...

  8. [百万级]通用存储过程.分页存储过程

    /*  名称:spAll_ReturnRows  输入:  输出:  调用:   EXEC spAll_ReturnRows 'SELECT  * FROM 表名', 页号, 返回记录数, '主键', ...

  9. 常见存储过程分页PK赛——简单测试分析常见存储过程分页速度

    数据的分页是我们再熟悉不过的功能了,各种各样的分页方式层出不穷.今天我把一些常见的存储过程分页列出来,再简单地测一下性能,算是对知识的总结,也是对您好想法的抛钻引玉.废话不多说,开始吧~~ 1.首先建 ...

最新文章

  1. java整数常量区_在Java中,我可以用二进制格式定义一个整数常量吗?
  2. AcWing 734. 能量石 (01背包)+(贪心 - 领项交换)
  3. mahout 算法集
  4. HDOJ---1273 漫步森林[图论]
  5. 用python绘制心形_python小趣味_520绘制一个心形.
  6. curl post https_Fiddler抓包13fiddler 抓包导出 curl 命令行
  7. Linux学习笔记002---Windows下安装CentOS7_带有UI桌面_图解
  8. linux中自动化日志分析,Shell项目案例7-应用日志分析
  9. react-navigation使用介绍及UI组件外实现统一跳转
  10. 数字权限管理(DRM)技术
  11. mac sqlite可视化工具_Navicat for SQLite 12 for mac(强大数据库管理及开发工具)
  12. Mysql 5.7 for windows 免安装版(解压版)安装和配置
  13. 【1800题】一、函数、极限、连续
  14. vscode 弹窗报错~/AppData\LocalPrograms\Microsavs Code\unins000.exe
  15. acfun怎么下载视频
  16. lzg_ad:XPE镜像文件部署详解
  17. mysql的联接算法_【MySQL—SQL编程】联接
  18. 拼音转换成汉字html,汉字转成拼音-用HTML实现
  19. PS提示不能填充,因为内存不足, 怎么解决?
  20. hrnet转onnx

热门文章

  1. 【软考】程序设计语言复习指南
  2. oracle对象不在回收站中,Oracle PURGE子句清除回收站中的对象
  3. mysql协议分析1,MySQL协议分析(1)
  4. JavaScript事件函数监视
  5. python数据分析第二讲_七月在线 Python数据分析 第二课 Numpy
  6. WPF仿微信保存与查看聊天记录
  7. python列表内元素求和_Python之list对应元素求和
  8. 数据结构—树(大纲)
  9. SPFA or bellman ford松弛法--单源最短路
  10. k3s 部署, 使用注意事项