机房重构(3)——存储过程

在敲机房收费过程中我们都会遇到这样的问题:很多功能实现都需要涉及到多张表的操作,比如充值、退卡、结账等功能的实现。这就需要我们多次对数据库进行操作,不仅代码量大大增加,而且执行效率也会大打折扣。为了提高效率,于是,存储过程就华丽登场了。

1、简介

存储过程是一组为了完成特定功能的语句集,经过编译后存储在数据库中,用户通过制定存储过程的名称并给出参数来执行它。存储过程在运算时生成执行方式并存储在数据库当中,当其再次运行时速度比单个的SQL语句要快。

   2、优缺点

1)优点

a、复用性强。存储过程可以重复使用,从而减少数据库开发的工作量。

b、提高执行效率。存储过程在创建的时候就进行了编译以后每次执行时都不需要重新编译,执行时比一般SQL语            句更快,提高了效率。

c、减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低            了网络传输的数据量。

d、更加安全。参数化查询过程可以防止SQL注入攻击。

2)缺点

虽然存储过程的使用提高了执行效率,但是,若一个程序系统中大量使用存储过程,如果在后期需求变化时导致数据结构发生变化,就会发生问题,而且后期系统维护也会非常困难,代价也是非常大的。

所以,在使用存储过程时一定要慎重,权衡利弊,尽力使程序达到最优。

3、创建

一下以充值为例创建一个存储过程,充值业务逻辑为:

1)查询注册表,判断是否已注册,如无注册信息

2)插入学生信息

3)插入学生注册信息

在SQL Sever中建立存储过程,如图,右击选择新建存储过程。

存储过程的代码如下:

-- =============================================
-- Author:		<YANG>
-- Create date: <2014年8月10日>
-- Description:	<注册>
-- =============================================
CREATE PROCEDURE [dbo].[PROC_Register]    --创建存储过程
	-- 添加存储过程中的参数
	@CardID VARCHAR(15),
	@StuID VARCHAR(10),
	@StuName varchar(10),
	@StuSex varchar(10),
	@StuDepart varchar(10),
	@StuGrade varchar(10),
	@StuClass varchar(10),
	@StuText varchar(50),
	@StuCash varchar(10),
	@StuStatus varchar(10),

	@RegTime varchar(10),
	@RegDate varchar(10),
	@UserID varchar(10),
	@RegCash varchar(15),
	@CheckStatus varchar(10)

AS
BEGIN
    --添加SQL语句
	select * from T_RegInfo where CardID [email protected]
	if @@ROWCOUNT =0
	insert into T_StuInfo (CardID,StuID ,StuName ,StuSex,StuDepart,StuGrade,StuClass,StuText,StuStatus,StuCash ) values (@CardID ,@StuID,@StuName,@StuSex ,@StuDepart ,@StuGrade ,@StuClass,@StuText,@StuStatus,@StuCash )
	insert into T_RegInfo (CardID ,StuID ,RegDate ,RegTime ,UserID ,RegCash ,CheckStatus ) values (@CardID ,@StuID ,@RegDate ,@RegTime ,@UserID ,@RegCash ,@CheckStatus )
END

这样一个存储过程就完成了,需要的时候,我们在D层直接调用就可以,高效快捷。

机房重构(3)——存储过程,布布扣,bubuko.com

时间: 2024-11-04 15:51:29

机房重构(3)——存储过程的相关文章

【机房重构】——存储过程(Stored Procedure)

[前言] 在学习数据库知识时,就曾经接触过存储过程,当时只是如蜻蜓点水一般,短暂的停留,并没有留下什么印象,在进行机房重构学习过程中,又重新认识了存储结构,从开始的抵触,不想用到后来逐渐了解,学着使用,思路越来越清晰,真正去做了才发现了其中的乐趣:常常说学习需要多总结,现在就是在积累,每一次的收获都要整理记录,才能留下深刻的印象,下面就来学习一下存储过程的知识吧. [存储过程的概念] 在采用客户机/服务器(C/S)计算模式的数据库系统中,很多工作可以在客户端完成,也可以在服务器端完成,数据库除了

【机房重构】—存储过程当媒人

以下是本人亲眼所见的机房重构帅小伙(简称重构),借助存储过程媒人(简称存储)与数据库大美女(简称:库)交往的经历,和大家分享一下. 那是一个风和日丽的白天,重构帅小伙独自一人走在处处飘香的初夏的校园中,他一直在思考,如何与库美女更容易的交往呢?以前重构去找库美女的时候总是需要先打一个电话(链接一个表),再问问库美女在哪里(再链接一个表),然后才能去找库美女(向两个表中存入数据):重构绞尽脑汁终于想出了一个办法, 他通过手机中的GPS(存储过程)直接定位库美女的位置,然后突然给库美女一个惊喜,这样

机房重构之存储过程

在重构机房中经常遇到这样的问题:很多功能的实现都需要涉及到多张表的操作,比如充值.结账和退卡等功能的实现.因此,就需要我们多次对数据库进行操作,代码量不仅会增加,执行效率也会大大打折扣.于是,存储过程就应运而生,以大大提高执行效率. 1.简介 存储过程是一组为了完成特定功能的语句集,经过编译后存储在数据库中,用户通过制定存储过程的名称并给出参数来执行它.存储过程在运算时生成执行方式并存储在数据库当中,当其再次运行时速度比单个的SQL语句要快. 2.优缺点 1)优点 a.复用性强.存储过程可以重复

【机房重构】SQl之存储过程

上篇博客介绍了SQl视图的使用,这篇博客通过内容和实例应用来简单介绍一下存储过程. 在机房重构的过程中,犯了个大忌(数据库设计在重构过程被修改了),所以影响了一个功能的实现,就又重新敲了一下机房收费系统退卡功能.正如"塞翁失马,焉知非福",纯三层的代码实现变成了利用存储过程之后的完美实现.期间的磕磕绊绊都让我们对存储过程加深了理解. 存储过程: 定义: 当需要写多条SQl语句的时候,就可以使用存储过程,在数据库中建立存储过程.之后在VS中通过调用存储过程来使用. 百度百科:存储过程(S

机房重构-完结篇

机房重构已经结束了,自从软考开始,光顾着准备软考和三级网络等级考试就没来得急总结.软考一开始,突然觉得时间好少,时间过得好快.这节奏,有点飕飕的. ---------------------技术总结: 熟悉了对Visual Studio这一开发环境的使用,深入了解了VB.net语言基础有了一定的认识并且学会使用.这一次使用三层架构,利用分分层的思想,深入理解了各层的职责.代码规范,这一次再敲代码的时候先学了一下代码规范,也把头文件注释设计好,让自己的代码漂亮一点. 最终的要思想还是面向对象,根据

机房重构——视图

视图.存储过程.触发器等等早就听说过,却没有真正接触过,一直处在一个以后再说的状态中,逃是逃不掉了. 机房重构,重构出了什么?留着这个疑问.重构完以后再做总结. 视图:在SQL中,外模式一级数据结构的基本单位是视图,就是从若干个基本表和(或)其他视图构造出来的表.其实就是一张虚表. 注意:在使用视图的时候,应当提前设置好关联表的主外键. 在机房收费系统里功能之一,学生查看余额时,用到了两张表的内容,Card表里的状态和余额,其他信息都来自学生表. 视图的创建和删除: 方法一:使用SQL语句创建视

个人机房重构总结

个人版的机房重构花费了一个月的时间,也算是完成了.现在整理一下三层机房收费系统里面的小问题.对于使用三层架构的机房收费系统来说,数据库的设计是一个重点.但是三层架构的小实例也是经典. 为什么很多人在开始项目之后,都无从下手? 因为三层的那个实例没有看懂(并不是没有实现).三层架构的登陆实例,实现不是目的,我们就是要从这个实例中学习,三层的是如何划分,并且是如何调用的. 机房重构的准备工作:     在学习完三层架构理论之后,紧接着的项目就是个人版机房收费系统. 对于三层结构的登陆实例,如果可以理

【机房重构】SQL之视图

最近在重构机房收费系统,越往后就会越感觉到这里更多的是对之前学过知识(数据库,设计模式)的一种应用和回顾.比如在登录功能中用到了抽象加反射,在学生下机中,我们可以用触发器来同时更新两个表.这里就先说一下视图的使用,关于视图的有点和作用百度上有很多答案,在此不再赘述. 视图定义: 自己理解:在涉及到多张表的操作的时候就可使用视图.这样可以避免与数据库直接联系.并且当你更新数据库数据时,就会自动更新视图中的数据,方便以后查询. 百度百科:计算机数据库中的视图是一个虚拟表,其内容由查询定义.同真实的表

机房重构---我们“重构”出了什么?

机房重构立即就要结束了,在这"第三个"系统结束的时候,有必要思考一下我们重构的目的了. 或许有人说,还有什么目的呀,不就是编程语言换成了.Net,做出来,调完bug,能执行就得了呗.这么浮夸的日子里,还叫什么劲啊? 对于有这样的想法的人,我必须道一声:您(白)辛苦了 ! 不管做什么事,没有一点总结性思考是无法进步的. 我以下的一些重构论述或者说反思性总结也存在很多不足,希望大家多多指正,在此先致谢! 本文将从五个方面论述一下这次的重构系统,各自是系统架构.UML图指导.设计模式应用.数