这次在机房收费系统合作中,用到了存储过程和事务处理,看似复杂的代码,其实背后有它不为人知的秘密,那就是更加简便的应用。下面我会根据自己的理解来谈论一下关于存储过程+事务是如何实现注册操作的。
事务的概念
那么,什么是事务呢?首先,让我们来了解一下事务的概念:事务是一种机制、一种操作序列,它包含了一组数据库操作命令作为一个整体一起向系统提交或撤消,这组命令要么全部执行,要么全部不执行。事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时事务是做为最小的控制单元来使用的。事务这种机制适用于多用户操作的数据通信系统,比如:订票系统、银行系统、保险公司系统等。
事务的属性
USE [Systemdb]
GO
/****** Object: StoredProcedure [dbo].[PROREGIST] Script Date: 08/12/2012 11:06:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =======================================================================================================================
-- Author: ****
-- Create date: 2012/8/12,10:11
-- Description: 注册操作的存储过程,添加事务的处理过程,涉及到两个表,分别是:T_StudentInfo,T_RechargeInfo
-- =======================================================================================================================
ALTER PROCEDURE [dbo].[PROREGIST]
-- 添加参数
@cardNo VARCHAR(20),--传入卡号
@studentID VARCHAR(20),--传入学号
@studentName VARCHAR(20),--传入姓名
@cardBalance DECIMAL(18,2),--传入余额
@studentGender VARCHAR(10),--传入性别
@studentSubject VARCHAR(50),--传入院系
@studentGrade VARCHAR(20),--传入年级
@studentClass VARCHAR(20),--传入班级
@studentNote VARCHAR(50),--传入注释
@registAdmin VARCHAR(10)--传入管理员
AS
BEGIN
DECLARE @Err1 INT,@Err2 INT--定义错误计数器
BEGIN TRANSACTION-- 开始事务
--插入学生信息到学生表
INSERT INTO T_StudentInfo (card_No,student_ID,student_Name,[card_Balance],student_Gender,student_Subject,student_Grade,student_Class,student_Note,regist_Administrator,regist_DateTime,if_Check)
VALUES(@cardNo,@studentID,@studentName,@cardBalance,@studentGender,@studentSubject,@studentGrade,@studentClass,@studentNote,@registAdmin,GETDATE(),0)
SET @Err1 = @@ERROR --出错给错误计数器赋值,变量不为0.
--插入充值记录到充值表
INSERT INTO T_RechargeInfo (card_No,recharge_Cash,recharge_Administrator,recharge_DateTime,if_Check)
VALUES(@cardNo,@cardBalance,@registAdmin,GETDATE(),0)
SET @Err2 =@@ERROR --出错给错误计数器赋值,变量不为0.
IF @Err1 =0 AND @Err2 = 0 --判断错误计数器中的值是否为0
COMMIT TRANSACTION --提交事务
ELSE
ROLLBACK TRANSACTION --出错,事务回滚,恢复到初始状态,没有任何改动
END