SQL存储过程和事务的应用

14 篇文章 0 订阅


    事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。

    存储过程是使用事务既可以方便数据库操作,也可以保持数据的完整性。


    以机房收费系统中学生注册为例:

        

    --学生注册存储过程 [PROC_Register]
    Create procedure [dbo].[PROC_Register]
    @cardNo varchar(20),@cardType  varchar(20),@studentNo varchar(20),@studentName varchar(20),@sex varchar(20),@department varchar(20),@grade varchar(20),@studentClass varchar(20),
    @cash numeric(10, 1),@explain varchar(20),@userID varchar(20),@status varchar(20),@isCheck varchar(20),@registerDate varchar(20),@registerTime varchar(20),
    @addMoney varchar(20),@rechargeDate varchar(20),@rechargeTime varchar(20)
    As
	Begin
		--事务
		SET NOCOUNT ON;
		SET XACT_ABORT ON;
		begin Tran   --开始一个事务
		--添加卡表
		Insert into T_Card(cardNo,studentNo,cardType,cash,explain,userID,status,ischeck,registerDate,registerTime) values(@cardNo,@studentNo,@cardType,@cash,@explain,@userID,@status,@isCheck,@registerDate,@registerTime)
		--添加学生表
		Insert into T_Student(cardNo,studentNo,studentName,sex,department,grade,studentClass) values(@cardNo,@studentNo,@studentName,@sex,@department,@grade,@studentClass)
		--添加充值表
		Insert into T_Recharge(cardNo,addMoney,rechargeDate,rechargeTime,userID,isCheck) values(@cardNo,@addMoney,@rechargeDate,@rechargeTime,@userID,@isCheck)
		
		If @@Error = 0   --如果数据操作无错 
			commit Tran   --提交事务
		else
			rollback Tran  --回滚事务

	END
	
	--说明:
	--1 、使用存储过程执行事物,需要开启XACT_ABORT参数(默认值为Off),将该参数设置为On,表示当执行事务时,如果出错,会将transcation设置为uncommittable状态,那么在语句块批处理结束后将回滚所有操作;如果该参数设置为Off,表示当执行事务时,如果出错,出错的语句将不会执行,其他正确的操作继续执行。

	--2、当SET NOCOUNT 为 ON 时,不返回计数(计数表示受 Transact-SQL 语句影响的行数,例如在Sql server查询分析器中执行一个delete操作后,下方窗口会提示 Rows Affected)。当   SET NOCOUNT 为 OFF 时,返回计数,我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的。


  存储过程和事务以前学习数据库的时候就知道,但也只是停留在概念上面,感觉好难不知道有什么用,而真到实践过程中才发现其实很简单,用处非常大。通过之前了解的和实践相结合,使知识学得更快更透彻。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值