分页存储过程--同时返回数据总数

1、定义存储过程

 1 USE [IPP_PCL]
 2 GO
 3 /****** Object:  StoredProcedure [dbo].[Printed_GetEOrderPrintedStatus]    Script Date: 11/04/2016 17:29:40 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8
 9 ALTER proc [dbo].[Printed_GetEOrderPrintedStatus]
10 @intPageIndex int,--当前页索引
11 @intPageSize int,--每页显示的记录数
12 @strEOrderNo nvarchar(50),
13 @strLoginId nvarchar(50),
14 @strCustomerItemCode nvarchar(30),
15 @strProductCode nvarchar(30),
16 @strCostomerPO nvarchar(30),
17 @dateOrderDateCreateFrom datetime,
18 @dateOrderDateCreateTo datetime,
19 @strMainProgram nvarchar(50),
20 @strSubProgram nvarchar(50),
21
22 @intReslut int OUTPUT,
23 @intTotal int OUTPUT --总记录数
24 as
25 BEGIN
26     DECLARE @strWhere NVARCHAR(1000) = ‘‘
27     DECLARE @strOrderBy NVARCHAR(50) = ‘ORDER BY OrderCreatedDate desc‘
28
29     --根据参数生成where条件
30     IF ISNULL(@strEOrderNo, ‘‘) <> ‘‘
31     SET @strWhere = @strWhere + ‘ AND EOrderNo like ‘‘%‘ + @strEOrderNo + ‘%‘‘‘
32
33     IF ISNULL(@strLoginId, ‘‘) <> ‘‘
34     SET @strWhere = @strWhere + ‘ AND LoginId like ‘‘%‘ + @strLoginId + ‘%‘‘‘
35
36     IF ISNULL(@strCustomerItemCode, ‘‘) <> ‘‘
37     SET @strWhere = @strWhere + ‘ AND CustomerItemCode like ‘‘%‘ + @strCustomerItemCode + ‘%‘‘‘
38
39     IF ISNULL(@strProductCode, ‘‘) <> ‘‘
40     SET @strWhere = @strWhere + ‘ AND ProductCode like ‘‘%‘ + @strProductCode + ‘%‘‘‘
41
42     IF ISNULL(@strCostomerPO, ‘‘) <> ‘‘
43     SET @strWhere = @strWhere + ‘ AND CustomerPo like ‘‘%‘ + @strCostomerPO + ‘%‘‘‘
44
45     IF @dateOrderDateCreateFrom IS NOT NULL
46     SET @strWhere = @strWhere + ‘ AND OrderCreatedDate >= ‘‘‘ + CONVERT(VARCHAR(100),@dateOrderDateCreateFrom,121) + ‘‘‘‘
47
48     IF @dateOrderDateCreateTo IS NOT NULL
49     SET @strWhere = @strWhere + ‘ AND OrderCreatedDate < ‘‘‘ + CONVERT(VARCHAR(100),DATEADD(day,1,@dateOrderDateCreateTo),121) + ‘‘‘‘
50
51     IF ISNULL(@strMainProgram, ‘‘) <> ‘‘
52     SET @strWhere = @strWhere + ‘ AND MainProgram = ‘‘‘ + @strMainProgram + ‘‘‘‘
53
54     IF ISNULL(@strSubProgram, ‘‘) <> ‘‘
55     SET @strWhere = @strWhere + ‘ AND SubProgram =  ‘‘‘ + @strSubProgram + ‘‘‘‘
56
57     --获取记录总数
58     DECLARE @strCountSql NVARCHAR(1000)
59     SET @strCountSql = ‘Select @RecordCount = count(*) FROM Printed_EOrderPrintedStatus WHERE 1 = 1 ‘ + @strWhere
60     EXEC sp_executesql @strCountSql, N‘@RecordCount int OUTPUT‘, @intTotal OUTPUT
61
62
63     DECLARE @strSql NVARCHAR(1000)
64     SET @strSql = ‘SELECT TOP ‘ + CONVERT(VARCHAR(10),@intPageIndex * @intPageSize) + ‘ ROW_NUMBER() OVER(‘ + @strOrderBy + ‘) AS rownum, * FROM Printed_EOrderPrintedStatus WHERE 1 = 1‘ + @strWhere + @strOrderBy
65     SET @strSql = ‘SELECT * FROM (‘ + @strSql + ‘) as temp WHERE temp.rownum > ‘ + CONVERT(VARCHAR(10), (@intPageSize * (@intPageIndex - 1)))
66     EXEC(@strSql)
67
68     if(@intTotal>0)
69     begin
70         set @intReslut=1
71     end
72
73 end

2、书写时应注意的点

(1) 定义@strWhere变量后,应及时初始化。

(2) 拼接SQL条件时,应注意用‘‘包括字段值。

(3) 应把时间变量转换成特定格式的字符串

(4) EXEC()

(5) EXEC sp_executesql

3、调用存储过程

 1    DECLARE @intPageIndex INT = 36
 2    DECLARE @intPageSize INT = 10 -- int
 3    DECLARE @strEOrderNo NVARCHAR(50) = N‘‘ -- nvarchar(50)
 4    DECLARE @strLoginId NVARCHAR(50) = N‘‘ -- nvarchar(50)
 5    DECLARE @strCustomerItemCode nvarchar(30) = N‘‘ -- nvarchar(30)
 6    DECLARE @strProductCode nvarchar(30) = N‘10‘ -- nvarchar(30)
 7    DECLARE @strCostomerPO nvarchar(30) = N‘‘ -- nvarchar(30)
 8    DECLARE @dateOrderDateCreateFrom DATETIME = ‘2016-1-18 03:59:00‘ -- datetime
 9    DECLARE @dateOrderDateCreateTo DATETIME = ‘2016-10-18 03:59:00‘ -- datetime
10    DECLARE @strMainProgram nvarchar(50) = N‘88‘ -- nvarchar(50)
11    DECLARE @strSubProgram nvarchar(50) = N‘‘ -- nvarchar(50)
12    DECLARE @intReslut INT = 0 -- int
13    DECLARE @intTotal INT = 0 -- int
14
15 EXEC dbo.Printed_GetEOrderPrintedStatus @intPageIndex,
16     @intPageSize,
17     @strEOrderNo,
18     @strLoginId,
19     @strCustomerItemCode,
20     @strProductCode,
21     @strCostomerPO,
22     @dateOrderDateCreateFrom, -- datetime
23     @dateOrderDateCreateTo, -- datetime
24     @strMainProgram, -- nvarchar(50)
25     @strSubProgram, -- nvarchar(50)
26     @intReslut OUTPUT, -- int
27     @intTotal OUTPUT -- int
28
29 SELECT @intTotal
30 SELECT @intReslut
时间: 2024-10-05 09:22:47

分页存储过程--同时返回数据总数的相关文章

Bootstrap分页插件ajax返回数据,工具类的编写

使用Bootstrap分页插件时,需要返回指定的参数,这样Bootstrap才能够识别 需要引入的css: <!-- boostrap table --> <link href="css/bootstrap-table.min.css" rel="stylesheet" /> 需要引入的js: 1 <!-- boostrap table --> 2 <script type="text/javascript&quo

SQL Server存储过程同时返回分页结果集和总数

前言 好长时间没摸数据库了,周末在家写了个报表的存储过程,一时间对使用存储过程实现分页的同时并计算出记录总数不知道怎么更好的去实现.按照我们正常的业务逻辑,存储过程数据首先是分页,其次接受若干查询条件,返回分页结果集的同时还需要返回记录总数给客户端. 我对于这样一个业务存储过程总结如下:1.内核层,通常也就是要查询的字段或者要计算的字段,这部分单独拿出来.  2.查询条件层. 如果内核只是查询一些字段的话,条件可以放在查询条件层拼接. 如果内核层完全是统计业务逻辑,那么查询条件则必须要放在内核层

大数据量分页存储过程效率测试附代码

在项目中,我们经常遇到或用到分页,那么在大数据量(百万级以上)下,哪种分页算法效率最优呢?我们不妨用事实说话. 测试环境 硬件:CPU 酷睿双核T5750  内存:2G 软件:Windows server 2003    +   Sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 按 Ctrl+C 复制代码1create database data_Test --创建数据库data_Test 2GO 3use data

毫秒级百万数据分页存储过程[欢迎转载]

数据分页一直是一个经久不衰的话题,在园子里看到了N多高手,都比我厉害, 今天把我使用的分页代码继续分享;请高手手下留情,少拍砖啦...哈哈; 欢迎大家转载!!!! 首先参考园子里的高手方法生成一个百万数据表; 耗时 33 秒; 然后创建分页存储过程;这个是基于SQL 2005 的ROW_NUMBER的, SQL 2000 不适用; SQL 2008 我没有安装,所以也没有测试过!估计应该可以运行. 2种算法可以选择 1. 使用  BETWEEN   ;  2.  TOP  ; 代码中已经注释了.

Django 分页查询并返回jsons数据,中文乱码解决方法

一.引子 Django 分页查询并返回 json ,需要将返回的 queryset 序列化, demo 如下: # coding=UTF-8 import os from django.core import serializers from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render from django.http import

接口调用外部系统返回数据,本系统做数据分页封装

场景: 本系统用的Mybatis分页插件PageHelper,调用了外部系统返回的数据为String类型的JSON串,数据量毕竟多,界面需要分页展示. 解决思路: 返回数据转List,然后把多个List放到一个List里,然后在从这个List里进行分页,前端只需要传一个页码过来即可, 部分代码如下: Service代码 ResponseMsg<AppResp> responseMsg = new ResponseMsg<>(); int currentPage = req.getC

存储过程分页【亿万庞大数据分页】

REATE PROCEDURE page @tblName   varchar(255),       -- 表名 @strGetFields varchar(1000) = '*', -- 需要返回的列 @fldName varchar(255)='id',      -- 排序的字段名 @PageSize   int = 10,          -- 页尺寸 @PageIndex int = 1,           -- 页码 @doCount bit = 0,   -- 返回记录总数,

Javascripe 根据数据总数计算分页

根据数据总数来计算分多少页 var _sPage = Math.ceil(parseInt(page.total, 10) / 10);//向上取整 $scope.sPage = []; for(var i = 0;i < _sPage;i++){     $scope.sPage.push(i+1); } 原文地址:http://blog.51cto.com/dd118/2116464

[转]关于SQL分页存储过程的分析

[转]关于SQL分页存储过程的分析 建立一个 Web 应用,分页浏览功能必不可少.这个问题是数据库处理中十分常见的问题.经典的数据分页方法是:ADO 纪录集分页法,也就是利用ADO自带的分页功能(利用游标)来实现分页.但这种分页方法仅适用于较小数据量的情形,因为游标本身有缺点:游标是存放在内存中,很费内存.游标一建立,就将相关的记录锁住,直到取消游标.游标提供了对特定集合中逐行扫描的手段,一般使用游标来逐行遍历数据,根据取出数据条件的不同进行不同的操作.而对于多表和大表中定义的游标(大的数据集合