从一开始对于机房收费系统的无从下手,到现在已经接近尾声,像冬天的迷雾一样,随着时间散开了去,对于其也是越来越清晰,想一想,这种学习的过程还真是美妙。

当然只学习不去总结是没有意义的。今天我就来把存储过程的使用总结一下。拿用户注册来说,就是往数据库里添加用户,以方便更多的用户使用。那么用户注册我们要注意到什么呢?

1.通过卡号判断用户是否已经存在。

如果不存在该用户:

2.将信息写入学生表。

3.更新充值记录表

4、更新卡表中的余额。

我们分析可以得到,如果不存在该用户,我们需要同时改动三个表。当然,你可以去一条一条的去写,但是这种做法不是我们想要的,今天是三个表,下次是三十个表,你还一条一条的写?所以在这里我们就引入了存储过程。

一、什么是存储过程呢?

定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。

讲到这里,可能有人要问:这么说存储过程就是一堆SQL语句而已啊?Microsoft公司为什么还要添加这个技术呢?

那么存储过程与一般的SQL语句有什么区别呢?

二、存储过程的优点:

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。

2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

3.存储过程可以重复使用,可减少数据库开发人员的工作量

4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

三、存储过程的种类:

1.系统存储过程:以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作,如 sp_help就是取得指定对象的相关信息

2.扩展存储过程 以XP_开头,用来调用操作系统提供的功能

3.用户自定义的存储过程,这是我们所指的存储过程

常用格式

create proceduresp_name

@[参数名] [类型],@[参数名] [类型]

as

begin

.........

end

四、调用存储过程

1.基本语法:exec sp_name [参数名]

五、删除存储过程

1.基本语法:

drop procedure sp_name

2.注意事项

(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程。

就好比机房收费系统中注册中用到的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE [dbo].[PROC_Register] 
@cardNo char(10),@studentNo char(10),@name ntext,@sex nchar(10),@department char(10),@grade nchar(10),@classgrade nchar(10),
@cash decimal(18,2),@cardStatue char(16),@cardType char(8),
@chargeMoney decimal(10,4),@chargeDateTime datetime,@userName char(10),
@statue ntext,@registerDateTime date,@checkStatue char(10)
AS
BEGIN
    --添加卡表
    insert into T_CardInfo (cardNo ,studentNo ,cardStatue ,cash,cardType ,registerDateTime ,userName ,checkStatue  ) values (@cardNo ,@studentNo ,@cardStatue ,@cash,@cardType ,@registerDateTime ,@userName ,@checkStatue  )
    --添加到学生表
    insert into T_StudentInfo (studentNo ,name ,sex ,department ,classgrade ,statue ,grade ) values (@studentNo ,@name ,@sex,@department,@classgrade ,@statue,@grade)
    --添加到充值记录表
    insert into T_Recharge (cardNo ,chargeDateTime ,chargeMoney ,userName ) values (@cardNo ,@chargeDateTime,@chargeMoney,@userName)
END

这样就可以轻松的操作在三个表中,当然存储过程远远不止这些,并且在以后学习中,我们还会继续研究。

像我们需要修改三张表一样,当一件同样的事情,需要我们来做三次,我们就要敢于去想一个比较高效的办法,像我之前就没有去想的这样一件事情,所以,我们还要去敢想,因为不知道有多少人在我们敢想之前做了出来。

机房收费系统重构之存储过程的使用相关推荐

  1. 机房收费系统重构(五)—登陆窗口完整版

         在上上篇.<机房收费系统重构(3)>.中主要是介绍了自己关于DAL层,工厂层.以及接口层,还有实体层的理解.可是好多读者再问我.你的代码呢,我在这解释一下.就是我仅仅是写出关于那 ...

  2. vb.net机房收费系统重构——存储过程的使用

    在敲写七层登陆过程中,接触了存储过程的概念,但当时还没使用.在正式的重构过程中,一点点添加,将存储过程也添加到了重构中.才正式了解了存储过程. 首先 [存储过程的概念] 存储过程Procedure是一 ...

  3. 机房收费系统重构版:照葫芦画瓢

        跟随着培养计划的步伐,自己弄完三层后就风风火火的开始了自己机房重构之路!现在回首这一路,有苦过有兴奋过,有想放弃不再做的时候也有挑灯夜战本本没电自动关机的时候,这一切的一切组成了自己这段时间最 ...

  4. 机房收费系统重构(三)—工厂+反射+DAL

    前段时间用简单的三层实现了窗体登录功能,心中有点小小的成就感,但是很快就被泼了凉水,机房收费不可能只用三层实现,如果你用三层,也就是说后面机房收费所有的功能都必须使用三层来实现功能.所以一周前始了七层 ...

  5. 机房收费系统重构版:那个系统我们一起遇到的问题

    前言:  总是说在问题中茁壮成长,俗话说光说不练假把式!回想之前确实停留在嘴上说说就完事了的假把式上,这次敲了第二次机房重构后根据自己的切身经历仔细回味了一番.相比于之前有了更深的理解吧,感觉还是有记 ...

  6. 机房收费系统个人重构版:暮然回首,灯火阑珊

    [背景]   在蹒跚中自己的机房收费系统个人重构版已完结:回望这一路征程,感慨颇多:快乐过,痛苦过:紧张过,放松过!真可谓:酸甜苦辣,五味杂陈. [比一比] VB.Net版个人重构版比VB版机房收费系 ...

  7. 重构机房收费系统(二)

    接上篇<机房收费系统重构(一)> 二.概要设计 完成了用例图,并用结合用例图完善了一下需求分析说明书,忘记是第几次修订需求分析说明书.有了用例图,很自然就进入了概要设计阶段.我认为这一阶段 ...

  8. 重构机房收费系统(一)

    从10月1号开始重构学校机房收费系统,没想到这次重构,推翻,再重构--用了两周时间. 这次整体架构采用三层,并融入了一些设计模式. 下面介绍这次重构的过程: 一.从UML用例图开始 对于机房收费系统的 ...

  9. 机房收费系统——转换list泛型时,字段名称不正确应出现故障

    因为之前对泛型研究了一番,所以就開始尝试着在机房收费系统重构中增加了泛型的使用. 可是到了做学生查看剩余金额这个功能的时候,还是依照之前的方法做的,可是在载入数据的时候班级这个框就没有显示出来--然后 ...

最新文章

  1. python使用说明书-InfluxDB——python使用手册
  2. 几篇JVM实战的东西
  3. ABAP data extract 数据抽取总结
  4. vc实现透明位图,透明背景
  5. java为什么复制数组会减一_如果从数组中复制了Java,为什么Java需要对最终变量进行显式强制转换?...
  6. dubbo简易监控中心安装
  7. python 2048源码_一个python的2048简单实现
  8. java 正方形_java-确定正方形和矩形之间的关系的算法
  9. 为什么Java有瞬态字段?
  10. CentOS安装sun java
  11. python excel处理 pandas 统计重复数据
  12. linux和win10文件共享smb,Windows 10 Samba文件共享的设置方法,解决不能访问和密码错误的问题...
  13. 电脑连不上网故障排查思路
  14. 基于数据库实现微服务动态路由
  15. c语言推箱子游戏实习报告,用C语言编写推箱子游戏
  16. 。。。。。。。。。。。。。
  17. HDU3687 National Day Parade
  18. 苹果进入品牌价值衰减期
  19. 男子在网吧蜗居4年半 曾647分考上大学 IS2120@BG57IV3
  20. 智能床、智能床垫、智能睡眠监测器的调研分析

热门文章

  1. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )
  2. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: W292 no newline at end of file )
  3. 【Android Protobuf 序列化】Protobuf 简介 ( Protobuf 项目简介 | Protobuf 优缺点分析 )
  4. 完全搞懂傅里叶变换和小波(3)——泰勒公式及其证明
  5. Redis源码剖析(十二)--客户端和服务器
  6. 数列分块入门2(区间小于c的个数)
  7. 10W学习笔记——查询之联接
  8. sqoop导入数据到hive中元数据问题
  9. c# C++接口封装 汽车模拟仿真
  10. 已经使用过的rails插件