在机房重构中,由一开始的无从下手,到今天,慢慢的结束,思路越来越清晰,今天,我们就说一下存储过程的使用!
(一)Why?
为什么使用存储过程呢?举个例子,我们在注册时要做的逻辑判断:
1.首先,判断卡号是否为空,是否为数字?
2.其次,判断卡号是否已经存在?
3.再者,判断充值金额是否大于最小充值金额?
4.符合,则修改数据库:(1)添加学生表
(2)添加充值表
(3)添加卡表
在这里,我们设计到了对于三个表的操作(Student,Recharge,Card)。当然,我们可以一个表一个表去修改,但是那肯定不是我的本意。我们都知道,编程是一个不断“抽象”和“封装”的过程,我们必须时刻注意要“合并同类项”,减少代码的重复。
所以,我们就引入了存储过程~~
(二)What?
什么是存储过程呢?
来自百度百科比较权威的解释:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
我的理解:存储过程,是对SQL语句的封装,就是把几种不同的对数据库的操作封装到一起,在调用的时候直接调用存储过程即可,不用再去写繁琐的SQL语句,一句话搞定。
就像我们把“清空文本框”“判断文本框是否为空”等等封装为一个函数,存储过程,就是把不同的操作封装起来了。
(三)How?
存储过程的使用说起来特别简单。
存储过程添加成功之后,再就是编写代码了。
以注册为例,
-- ============================================= -- Author: <王孟梅> -- Create date: <2015/6/1,> -- Description: <注册> -- ============================================= CREATE PROCEDURE [dbo].[PROC_Register] @cardNo varchar(10),@studentNo varchar(10),@cash varchar(10),@type varchar(10),@ischeck varchar(10),@status varchar(10),@date varchar(10), @time varchar(10),@state varchar(10),@username varchar(10), @studentname varchar(10),@sex varchar(10),@department varchar(10),@grade varchar(10),@classname varchar(10),@explain varchar(10), @addmoney varchar(10) AS BEGIN --添加Card表 insert into Card (cardNo ,studentNo ,cash,Type ,IsCheck ,Status,Date,Time ,State ,userName) values (@cardNo ,@studentNo ,@cash ,@Type,@IsCheck ,@Status ,@Date ,@Time ,@state ,@username ) --添加到Student表 insert into Student (cardno,studentNo ,studentName ,sex ,department ,grade ,classname ,explain,cash ,UserName ) values (@cardno,@studentNo ,@studentName ,@sex ,@department ,@grade ,@classname ,@explain,@cash ,@UserName) --添加到Recharge表 insert into Recharge (cardNo ,AddMoney ,Date ,Time ,IsCheck,userName ) values (@cardNo ,@AddMoney ,@Date ,@Time ,@IsCheck,@userName) END GO
在需要的时候,我们直接调用就可以了。