开篇语

之前的公司并未使用存储过程来做项目,所以小生对存储过程的调用、使用也是一知半解,刚好这家公司就大量用到了存储过程

这次做的功能,为了保持风格一致,也是需要使用存储过程来实现动态sql和数据分页

下面一起来看看如何实现的吧(小白一枚,不喜勿喷,请轻拍)~

调用存储过程(其中condition 是前台传入的拼接查询条件,parameters[4] 是排序字段)

存储过程实现

是否

USE [EPMS]
GO
/****** Object: StoredProcedure [dbo].[sp_GetCollectionManage] Script Date: 2016/9/14 10:14:00 ZhangXiaoYong******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetCollectionManage]
@PageSize INT,--页面大小
@pageCurrentIndex INT,--当前页数
@condition nvarchar(MAX),-- 查询条件
@pageCount INT OUT ,-- 当前页 内容数量
@orderStr nvarchar(MAX) --排序字段
AS
begin
/*获取记录数*/
declare @RecordCount int
/*计算页面数据*/ declare @SqlMain nvarchar(4000)
declare @SqlStr nvarchar(4000)
/* SQL SERVER 拿到查询的数据总数*/
set @SqlMain='select @CountTemp=count(1) from
(
select ef.id, e.dictdata_name, ef.city_id,ef.receive_time,ef.receive_amount,ef.batch_id,ef.city__Manager,ef.contract_id
,ROW_NUMBER() Over(order by '+@orderStr+' desc) As SerialNumber
from V_city e
left join Collection_Confirmation ef on e.id = ef.city_id where '+@condition+') as T left join Contract fa on T.contract_id = fa.id
left join V_employeeDutyMerger show
on T.dictdata_name=show.cityname and show.dutyname=''城市经理''';
exec sp_executesql @SqlMain,N'@CountTemp int output',@pageCount output; --重要执行 declare @beginIndex as varchar(20)
declare @endIndex as varchar (20)
--定义一个开始数,和一个结束数,用于分页
set @beginIndex=(@pageCurrentIndex-1)*@PageSize+1 set @endIndex=@pageCurrentIndex*@PageSize
/* SQL SERVER 执行查询并分页输出 */
set @SqlStr=
'select T.id, T.dictdata_name, T.receive_time,T.receive_amount,T.batch_id, fa.contract_name,show.name from
(
select ef.id, e.dictdata_name, ef.city_id,ef.receive_time,ef.receive_amount,ef.batch_id,ef.city__Manager,ef.contract_id
,ROW_NUMBER() Over(order by '+@orderStr+' desc) As SerialNumber
from V_city e
left join Collection_Confirmation ef on e.id = ef.city_id where '+@condition+') as T left join Contract fa on T.contract_id = fa.id
left join V_employeeDutyMerger show
on T.dictdata_name=show.cityname and show.dutyname=''城市经理'' where T.SerialNumber>='+cast(@beginIndex as varchar(20) )+ ' and T.SerialNumber <='+
cast(@endIndex as varchar(20)) --print (@pageCurrentIndex * @PageSize)
--print @SqlCount1
--print @SqlStr
exec (@SqlStr) end -- 执行该存储过程
declare @pageCount int;
exec [dbo].[sp_GetCollectionManage] 15,1,' ef.city_id in(210)',@pageCount output,'ef.id'

存储过程实现

前台效果

第一页

第二页

注:此存储过程还有很多需要优化的地方,仅供参考,欢迎提宝贵意见~

End

 

初识 Sql Server存储过程的更多相关文章

  1. [翻译]初识SQL Server 2005 Reporting Services Part 1

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表.毕竟 ...

  2. SQL Server存储过程中使用表值作为输入参数示例

    这篇文章主要介绍了SQL Server存储过程中使用表值作为输入参数示例,使用表值参数,可以不必创建临时表或许多参数,即可向 Transact-SQL 语句或例程(如存储过程或函数)发送多行数据,这样 ...

  3. SQL Server存储过程Return、output参数及使用技巧

    SQL Server目前正日益成为WindowNT操作系统上面最为重要的一种数据库管理系统,随着 SQL Server2000的推出,微软的这种数据库服务系统真正地实现了在WindowsNT/2000 ...

  4. SQL Server 存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  5. 14、SQL Server 存储过程

    SQL Server 存储过程 存储过程类似函数,可以重复使用.相对于函数,存储过程拥有更强大的功能和更高的灵活性. 存储过程中可以包含逻辑控制语句和数据操作语句,可以接受参数,输出参数,返回单个值或 ...

  6. (摘录)SQL Server 存储过程

    文章摘录:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html SQL Server 存储过程 Transact-SQL中的存储过程 ...

  7. Sql Server 存储过程中查询数据无法使用 Union(All)

    原文:Sql Server 存储过程中查询数据无法使用 Union(All) 微软Sql Server数据库中,书写存储过程时,关于查询数据,无法使用Union(All)关联多个查询. 1.先看一段正 ...

  8. [翻译]初识SQL Server 2005 Reporting Services Part 3

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 3 这是关于SSRS文章中四部分的第三部分.Part 1提供了一个创建基本报表的递阶教程.Part 2 ...

  9. [翻译]初识SQL Server 2005 Reporting Services Part 4

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...

随机推荐

  1. [原]CentOS7.2部署node-mapnik

    转载请注明表作者think8848及出处(http://think8848.cnblogs.com) node-mapnik依赖项中要求g++ >= 5, toolchain (>= GL ...

  2. [虾扯蛋] android界面框架-Window

    从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等.下面就以这几个类为出发点来概览下安卓开发的"界面架构&quo ...

  3. Android如何制作漂亮的自适布局的键盘

    最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路. 这里最上面的titlebar高度固定,下面输入的金额高 ...

  4. mount报错: you must specify the filesystem type

    在linux mount /dev/vdb 到 /home 分区时报错: # mount /dev/vdb /homemount: you must specify the filesystem ty ...

  5. PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.

    PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...

  6. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  7. 如何解决流程开发中SheetRadioButtonList页面取值问题

    分享一个常见的取值问题. 应用场景: SheetRadioButtonList控件,点击其中一项执行事件操作.如果是页面加载的情况下,值就无法取到. 具体原因如下: 我给SheetRadioButto ...

  8. win10上部署Hadoop-2.7.3——非Cygwin、非虚拟机

    开始接触Hadoop,听人说一般都是在Lunix下部署Hadoop,但是本人Lunix不是很了解,所以Google以下如何在Win10下安装Hadoop(之后再在Lunix下弄),找到不少文章,以下是 ...

  9. Ubuntu手动设置DSL连接

    在安装完Ubuntu之后,发现图形界面的DSL连接不管用了,郁闷了好几天,想想移动每个月120个小时的流量岂不是白白浪费了.正当我想重返Windows系统的时候,却发现了手动设置连接DSL的好方法,感 ...

  10. CentOS 6.5安装Node.js, npm

    CentOS上可以通过下载*.tar.gz安装包的方式自己解压缩.编译的方式安装,同时还可以采用EPEL的方式安装: Node.js and npm are available from the Fe ...