在存储过程中运用事务
来源:互联网 发布:mysql 导出文件格式 编辑:程序博客网 时间:2024/06/16 00:07
在存储过程中运用事务
create database study
use study
create table peopleInfor --用户信息表
(
ID int primary key identity(1001,1),--主键自动增长
name1 nvarchar(30),--用户名
YMoney money default(0)--卡上剩余金额
)
create table peopleInfor_mx --用户取款明细
(
mx_id int primary key identity(100001,1), --主键自动增长
mx_Money money , --取款或付款金额
mx_type nvarchar(20) check (mx_type='取钱' or mx_type ='存钱'),--代表此条数据是 存钱,还是 取钱
peopleId int foreign key (peopleID)references peopleInfor(id) not null
)
--创建一个基本的存储过程
create procedure pro_insert(@name nvarchar(30),@money money)as
begin
insert into peopleInfor(name1,YMoney)values(@name,@money)
end
--执行 存储过程。
exec pro_insert '赵刚',20000
exec pro_insert '王五',30000
--错误的例子模仿银行转账
create procedure pro_zhuangzhang
@name_Jin nvarchar(30),--转进账户名称
@name_chu nvarchar(30), --转出帐户名称
@money money --转入钱数)
as
begin tran --开发事务
declare @YMoney money --账上余额
declare @chuID int --出款账号的ID
declare @JinID int --进款账号的ID
select @YMoney=YMoney from peopleInfor where name1=@name_chu --获取账上余额
if(@money<=@YMoney)--判断 账号余额 是否 大于等于 转款余额
begin
update peopleInfor set YMoney=YMoney-@money where name1=@name_chu -- 从 出帐 帐户中减去 转出金额
select @chuID=ID from peopleInfor where name1=@name_chu -- 获得出帐ID
insert into peopleInfor_mx (mx_Money,mx_type,peopleId)values(@money,'取钱',@chuID) --把转出金额 插入明细 表中并标明是 取出的钱
update peopleInfor set YMoney=YMoney+@money where name1=@name_Jin-- 在 进帐 帐户中加上 转出金额
select @chuID=ID from peopleInfor where name1=@name_Jin-- -- 获得出帐ID
insert into peopleInfor_mx (mx_Money,mx_type,peopleId)values(@money,'存钱',@JinID)
-- 此时 @JinID 为空时 ,不能插入此列。故软件报错。
if @@error<>0
begin
rollback tran
end
end
commit tran --执行事务
GO
--对的例子 模仿银行转账
create procedure pro_zhuangzhang
@name_Jin nvarchar(30),--转进账户名称
@name_chu nvarchar(30), --转出帐户名称
@money money --转入钱数)
as
begin tran --开发事务
declare @YMoney money
declare @chuID int
declare @JinID int
select @YMoney=YMoney from peopleInfor where name1=@name_chu
if(@money<@YMoney)
begin
update peopleInfor set YMoney=YMoney-@money where name1=@name_chu
select @chuID=ID from peopleInfor where name1=@name_chu
insert into peopleInfor_mx (mx_Money,mx_type,peopleId)values(@money,'取钱',@chuID)
update peopleInfor set YMoney=YMoney+@money where name1=@name_Jin
select @JinID=ID from peopleInfor where name1=@name_Jin
insert into peopleInfor_mx (mx_Money,mx_type,peopleId)values(@money,'存钱',@JinID)
if @@error<>0
begin
rollback tran
end
end
commit tran --执行事务
GO
select * from peopleInfor
select * from peopleInfor_mx
delete from peopleInfor where id=1003
exec pro_zhuangzhang '赵刚','王五',20000
'赵刚',20000
'王五',30000
- 在存储过程中运用事务
- 在存储过程中实现事务
- sql T_sql 在存储过程中使用事务Trans 例子
- 如何在mysql 的存储过程中使用事务
- 在Mysql存储过程中使用事务实例
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中使用事务
- 存储过程中事务操作
- 无法删除Adobe Reader 9.X程序安装目录的解决办法
- 定义不一定在相应的cpp里
- 文件系统
- 加 inline
- s3c2410矩阵键盘驱动
- 在存储过程中运用事务
- 清除栈错误: User 42 panic
- 关于vs2003调试时提示:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装
- DDD之模型
- 【转帖·Win Socket】Windows Socket编程头文件以及lib
- 让vdsp与uclinux共舞(18):让VDSP读取vmlinux的调试信息
- datalist
- 寻找数据库中的触发器、存储过程等
- Rails3世界系列报道