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