事务和储存过程

create database moneychange
go
use moneychange
go

create table bank
(
id int primary key identity(1,1),
name varchar(20) not null,
money int default(0) check(money>=0)
)

insert into bank values('张三',100)
insert into bank values('李四',50)

select * from bank

            --删除储存过程
            if exists (select * from sys.procedures where name='chenge')
            drop proc chenge
            go
            --创建储存过程
            create proc chenge
                 @from int,
                 @into int,
                 @money int, 
                 @error int output
            as

                 --创建事务
                begin tran
                    --declare @error int   --声明变量
                    set @error=0
                    --我们将可能会出错的sql 写在begin try...endtry 之间,若出错,刚程序就跳到紧接着的begin try...endtry 的beign catch...endcatch
                    --中,执行beign catch...endcatch错误处理SQL。try..catch 是可以嵌套的。
                begin try
                    update bank set money=money-@money where id=@from
                    set @error=@@ERROR+@error
                    update bank set money=money+@money where id=@into
                    set @error=@@ERROR+@error
                end try

                begin catch
                    set @error=@error+ERROR_NUMBER()   --获取错误语句
                                                        --error_number    返回错误代码
                                                        --error_serverity 返回错误的严重级
                                                        --error_state     返回错误状态代码
                                                        --error_message   返回完整的错误信息
                                                        --ERROR_NUMBER    函数功能主要返回错误信息所对应的 “错误消息表”中的行号
                end catch
                   if @error<>0
                       begin
                          rollback tran
                       end
                   else 
                       begin
                          commit tran
                       end
            go

            declare @error int 
            exec chenge 1,2,10,@error output
            print @error

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值