USE [CapitalFortune]
GO
/****** Object:  StoredProcedure [dbo].[SetMultiPages]    Script Date: 05/30/2012 10:17:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:  hugejile
-- alter date: 2070-9-29
-- Description: 分页,请勿随意改动
-- =============================================
ALTER PROCEDURE [dbo].[SetMultiPages]
 -- Add the parameters for the stored procedure here
  @TableName NVARCHAR(2000),
  @ColumnNames NVARCHAR(2000),
  @Conditions NVARCHAR(2000),
  @OrderbyString NVARCHAR(2000),
  @PageSize INT=1000,
  @CurrentPage INT=1,
  @RecordCount INT=0 OUTPUT,  
  @PageCount INT=1 OUTPUT
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets FROM
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
 
 DECLARE @Sql NVARCHAR(4000),
   @RowCount INT
 SET @RowCount=0
 IF @ColumnNames is null or LEN(@ColumnNames)=0
 BEGIN
  SET @ColumnNames='*'
 END

IF @CurrentPage is null
 BEGIN
  SET @CurrentPage=1
 END
 
 IF @PageSize is null
 BEGIN
  SET @PageSize=10
 END
 
 IF @Conditions is null
 BEGIN
  SET @Conditions=''
 END
 ELSE
 BEGIN
  IF LEN(@Conditions)<>0
  BEGIN
   SET @Conditions=' WHERE ' + @Conditions
  END
 END

-- INSERT statements for procedure here
    IF @CurrentPage>0
    BEGIN
  SET @Sql= N'SELECT * FROM (SELECT '+@ColumnNames+', (ROW_NUMBER() over (ORDER BY '+@OrderbyString+')) AS RowNum FROM '+@TableName+@Conditions+' )T WHERE T.RowNum Between '+Cast((@CurrentPage-1)*@PageSize+1 AS NVARCHAR(10)) + ' and ' + Cast(@CurrentPage*@PageSize AS NVARCHAR(10)) + ';SET @RowCount =ROWCOUNT_BIG()'
  PRINT 'SELECT CommandText: ' + @Sql
  EXECUTE sp_executesql @Sql,N'@RowCount INT OUTPUT',@RowCount OUTPUT 
  
  SET @Sql = 'SELECT @RecordCount = COUNT(*) FROM '+@TableName+@Conditions
  PRINT 'Count CommandText: ' + @Sql
  EXECUTE sp_executesql @Sql,N'@RecordCount INT OUTPUT',@RecordCount OUTPUT 
  SET @PageCount=ceiling(1.0 * @RecordCount / @PageSize)
  PRINT @RecordCount
  --RETURN @RecordCount
 END
 ELSE IF @PageSize>0
 BEGIN
  SET @Sql= N'SELECT TOP ' + Cast(@PageSize as nvarchar(10)) + ' ' + @ColumnNames + ', (ROW_NUMBER() over (ORDER BY '+@OrderbyString+')) AS RowNum FROM '+@TableName+@Conditions+' ORDER BY ' + @OrderbyString
  PRINT 'SELECT CommandText: ' + @Sql
  EXEC (@Sql)
  SET @Sql = 'SELECT @RecordCount = COUNT(*) FROM '+@TableName+@Conditions
  PRINT 'Count CommandText: ' + @Sql
  EXECUTE sp_executesql @Sql,N'@RecordCount INT OUTPUT',@RecordCount OUTPUT 
  SET @PageCount = CEILING(CAST(@RecordCount AS FLOAT)/CAST(@PageSize AS FLOAT))
  --print cast(@RecordCount as nvarchar(10)) + ' pagesize ' + Cast(@PageSize as nvarchar(10))
  --print @PageCount
  --RETURN @RowCount
 END
 ELSE
 BEGIN
  SET @Sql= N'SELECT ' + @ColumnNames + ', (ROW_NUMBER() over (ORDER BY '+@OrderbyString+')) AS RowNum FROM '+@TableName+@Conditions+' ORDER BY ' + @OrderbyString +'; SET @RecordCount = ROWCOUNT_BIG()'
  PRINT 'SELECT CommandText: ' + @Sql
  --EXEC (@Sql)
  --SET @Sql = ''
  --PRINT 'Count CommandText: ' + @Sql
  EXECUTE sp_executesql @Sql,N'@RecordCount INT OUTPUT',@RecordCount OUTPUT 
  SET @PageCount = -1 
 END
 RETURN 1
END

这个是分页存储过程,百万级数据应该没有问题

调用方法

DECLARE @return_value INT,
  @RecordCount INT ,
  @PageCount INT ,
  @PageSize INT

EXEC @return_value = [dbo].[SetMultiPages]
   @TableName = 'USERS',
   @ColumnNames = '*',
   @Conditions = '',
   @OrderbyString = 'UserId',
   @PageSize = 10,
   @CurrentPage = 0,
   @RecordCount = @RecordCount output,
   @PageCount = @PageCount output

SELECT @RecordCount AS N'RecordCount',
   @PageCount AS N'PageCount',
   @PageSize AS N'PageSize'

@RecordCount = @RecordCount output,
@PageCount = @PageCount output这两个参数是输出参数,用来接受存储过程中的输出参数的值,计算总数据和总页数。调用的时候必须说明输出参数的标志就是Output关键字标识!

转载于:https://www.cnblogs.com/Minghao_HU/archive/2012/05/30/2526105.html

Sql中Output参数用法和分页存储过程相关推荐

  1. PL/Sql 中创建、调试、调用存储过程

    存储过程  所用函数说明  功能:求和与差  原形:GetSumAndSub(p1 in number , p2 in number ,m out number , b out number)   参 ...

  2. SQL 中表值参数的使用

    在SQL中,可以使用表值参数作为存储过程的输入参数,这样不用重复定义临时表或者表变量. 表值参数需要采用用户自定义的表类型来声明,所以在使用表值参数之前一定要先定义表类型 下面是敌营表类型的例子: u ...

  3. Qt工作笔记-使用SQL中的LIMIT进行数据分页

    目录 概念 操作 概念 这里使用SQL语言的中LIMIT的特点进行分页显示.这个关键字我就不多说了,现在来看运行截图! 表结构如下: 程序一开始运行: 分页显示: 操作 关键源码如下: sql.h # ...

  4. SQL中in参数在存储过程中传递及使用的方法

    背景: 1.使用存储过程 2.存储过程中有in 3.in括号里面的内容作为参数传递 解决方案: 1.直接拼接sql 可在存储过程中拼接字符串,然后执行此字符串,类似于js中的eval PROCEDUR ...

  5. Oracle数据库PL/SQL中执行存储过程

    有时生产线上问题,或者调试需要手动在pl/sql中执行存储过程,但一般不建议这么做(影响线上交易). 一.直接测试执行 在pl/sql中找到对应需要测试的存储过程,左边菜单栏:Procedures下. ...

  6. C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息

    C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CR ...

  7. 用于jqGrid获取SQL Server中数据的简单分页存储过程及sp_executesql的一点使用方法...

    之前我第一篇有关jqGrid JSON数据的获取是动态拼接的SQL语句(因为是Access数据库),然后我自己也用SQL Server中的数据作了测试,为了方便写了一个分页的存储过程,过程中也认识了下 ...

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

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

  9. 完整SQL分页存储过程(支持多表联接)

    Code /*********************************************************   * 作    用:数据分页(完整SQL分页存储过程(支持多表联接)) ...

  10. C#调用SQL Server分页存储过程

    以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...

最新文章

  1. Git教程学习(一)
  2. GARFIELD@02-25-2005
  3. A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
  4. addShutdownHook钩子
  5. Html中框架的使用
  6. 表的插入、更新、删除、合并操作_2_插入含自增列的记录
  7. chm转pdf_简历是以PDF还是Word格式提交的?
  8. linux下c的学习
  9. HashMap和HashSet的内部工作机制
  10. 关于linux用户权限的理解
  11. HTML连载70-相片墙、盒子阴影和文字阴影
  12. 容器(container)技术之发展简史
  13. html-webpack-plugin 中使用 title选项设置模版中的值无效
  14. 春运能不能抢到票就看他了!开源的Python抢票神器
  15. arduino智能浇花系统_自动浇花套件
  16. angular自定义管道
  17. mp4播放器下载android,MP4视频播放器最新版下载_MP4视频播放器正式版_MP4视频播放器9.3-华军软件园...
  18. php amp 转义,HTML转义和反转义
  19. 如何制作一个在线订酒店的小程序
  20. smaba(跨平台文件共享)

热门文章

  1. CentOS6.5 linux 逻辑卷管理 调整分区大小
  2. 2013 成都邀请赛
  3. 使用Fresco实现简单的显示一张图片
  4. Android CI with jenkins in ubuntu
  5. 免费下载思科 642-382考试题库
  6. java中的this关键字详解(图示)
  7. oracle 回表是什么,ORACLE回表
  8. Android全局变量使用
  9. webpack5学习与实战-(五)-直接加载资源
  10. 一般试卷的纸张大小是多少_考试试卷统一设置标准规格要求