Sql中Output参数用法和分页存储过程
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参数用法和分页存储过程相关推荐
- PL/Sql 中创建、调试、调用存储过程
存储过程 所用函数说明 功能:求和与差 原形:GetSumAndSub(p1 in number , p2 in number ,m out number , b out number) 参 ...
- SQL 中表值参数的使用
在SQL中,可以使用表值参数作为存储过程的输入参数,这样不用重复定义临时表或者表变量. 表值参数需要采用用户自定义的表类型来声明,所以在使用表值参数之前一定要先定义表类型 下面是敌营表类型的例子: u ...
- Qt工作笔记-使用SQL中的LIMIT进行数据分页
目录 概念 操作 概念 这里使用SQL语言的中LIMIT的特点进行分页显示.这个关键字我就不多说了,现在来看运行截图! 表结构如下: 程序一开始运行: 分页显示: 操作 关键源码如下: sql.h # ...
- SQL中in参数在存储过程中传递及使用的方法
背景: 1.使用存储过程 2.存储过程中有in 3.in括号里面的内容作为参数传递 解决方案: 1.直接拼接sql 可在存储过程中拼接字符串,然后执行此字符串,类似于js中的eval PROCEDUR ...
- Oracle数据库PL/SQL中执行存储过程
有时生产线上问题,或者调试需要手动在pl/sql中执行存储过程,但一般不建议这么做(影响线上交易). 一.直接测试执行 在pl/sql中找到对应需要测试的存储过程,左边菜单栏:Procedures下. ...
- C#调用SQL中的存储过程中有output参数,存储过程执行过程中返回信息
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度.不然获取到的结果总是只有第一字符.本人就是由于这个原因,折腾了很久.在此记录一下,供大家以后参考! 例如: CR ...
- 用于jqGrid获取SQL Server中数据的简单分页存储过程及sp_executesql的一点使用方法...
之前我第一篇有关jqGrid JSON数据的获取是动态拼接的SQL语句(因为是Access数据库),然后我自己也用SQL Server中的数据作了测试,为了方便写了一个分页的存储过程,过程中也认识了下 ...
- SQL Server分页存储过程实践(图解)
下面来对SQL Server分页存储过程进行一下实做.图解成功的各个步骤. 一 找到大数据量的示例表 分页都是针对大记录数的表:反之有大记录数的表,可能就需要分页.例如银行用户表,就会上千万.下面先做 ...
- 完整SQL分页存储过程(支持多表联接)
Code /********************************************************* * 作 用:数据分页(完整SQL分页存储过程(支持多表联接)) ...
- C#调用SQL Server分页存储过程
以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...
最新文章
- Git教程学习(一)
- GARFIELD@02-25-2005
- A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
- addShutdownHook钩子
- Html中框架的使用
- 表的插入、更新、删除、合并操作_2_插入含自增列的记录
- chm转pdf_简历是以PDF还是Word格式提交的?
- linux下c的学习
- HashMap和HashSet的内部工作机制
- 关于linux用户权限的理解
- HTML连载70-相片墙、盒子阴影和文字阴影
- 容器(container)技术之发展简史
- html-webpack-plugin 中使用 title选项设置模版中的值无效
- 春运能不能抢到票就看他了!开源的Python抢票神器
- arduino智能浇花系统_自动浇花套件
- angular自定义管道
- mp4播放器下载android,MP4视频播放器最新版下载_MP4视频播放器正式版_MP4视频播放器9.3-华军软件园...
- php amp 转义,HTML转义和反转义
- 如何制作一个在线订酒店的小程序
- smaba(跨平台文件共享)