在存储过程中运用事务
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
分享到:
相关推荐
在本教程中,我们将为您介绍MySQL的基本概念、安装与配置、SQL语言、数据库表的设计与操作、索引、存储过程和触发器等知识。 Python操作MySQL数据库 掌握Python与MySQL的操作是开发高效数据库应用的关键。在本教程中...
二、基础教育大数据应用的具体思路 在基础教育运用大数据进行事务管理的过程中主要将其 运用到数据的采集与整合中了,由此更好地实现信息数据构 建的体系化,为推动数据运用发展奠定良好基础。 2.1 应用之前,做好...
学会运用存储过程和case,while循环和运用变量和视图,索引和事务
用SQL server 处理数据库,主要就是和数据库还有处理数据库的事务打交道,如何管理好数据库这个对象和处理数据库的事务过程,是我们运用好SQL server非常关键的一点,下边是我对管理事务和数据库这章的总结。...
15.5.2 oracle中存储过程和函数的管理 324 第16章 sql触发器 325 16.1 触发器的基本概念 325 16.1.1 触发器简介 325 16.1.2 触发器执行环境 325 16.2 sql server中的触发器 326 16.2.1 sql server触发器的种类...
15.3 SQL Server中的存储过程和函数 15.3.1 系统存储过程 15.3.2 使用CREATE PROCEDURE创建存储过程 15.3.3 使用EXECUTE语句调用存储过程 15.3.4 使用CREATE FUNCTION创建函数 15.3.5 使用Enterprise ...
超市业务管理系统,SQL,C# 运用游标,事务,存储过程,触发器
如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。 ALTER ...
0987 在ADO.NET中实现数据库的事务处理 574 0988 将任意文件保存到数据库中 574 0989 将存储在数据库中的文件提取出来 575 0990 合并具有相同数据表结构的查询结果 575 0991 使用DataTable进行数据检索 ...
--创建存储过程P_Sale3,能够根据指定的产品编号和日期,以输出参数的形式得到该产品的销售金额 CREATE PROCEDURE P_Sale3 @ProNo nvarchar(5),@SaleDate DateTime,@MONEY Decimal(8,2)OUTPUT AS SET @MONEY=( ...
仓库管理系统介绍 WM系统支持内容: 定义和管理仓库中的存储区和仓位 处理所有的记帐和事务, 如收货,发货和一般的转储等 对库存的变动情况进行监测 按仓位进行存储 确保在存储管理系统中的记帐与仓库中的实际库存...
7.5.7 SQL语句在PL/SQL中的运用 114 7.6 选择结构 114 7.6.1 格式1: IF_THEN_ELSE语句 114 7.6.2 格式2: IF_THEN_ELSE_IF语句 114 7.7 循环结构 114 7.8 异常处理(了解) 114 7.8.1 异常 114 7.8.2 PL/SQL是如何处理...
" "(2)数据库开发(选做) " "在数据库设计的基础上开发一个基本的数据库应用系统,要求有基本的数据查询功能 " "和数据管理功能,并能将存储过程、触发器、事务控制等运用其中。开发工具学生可 " "以自己选择。 ...
在迁移过程中,VMotion只是在 点阵图里对信息交换进行监控,所以整个转移过程对用户来说是透明的。一旦整个存和 系统状态全部复制到目标ESXi服务器中,VMotion就会自动终止源虚拟机,同时将点阵图 转移到目标ESXi...
实例52 调用存储过程 实例53 事务处理 实例54 利用连接池访问数据库 第8章 JSP中JavaBean的应用 实例55 在JSP中应用JavaBean 实例56 用HTML表单设置JavaBean的属性值 实例57 计数器JavaBean 实例58 查询...
实例52 调用存储过程 实例53 事务处理 实例54 利用连接池访问数据库 第8章 JSP中JavaBean的应用 实例55 在JSP中应用JavaBean 实例56 用HTML表单设置JavaBean的属性值 实例57 计数器JavaBean 实例58 查询...
实例52 调用存储过程 实例53 事务处理 实例54 利用连接池访问数据库 第8章 JSP中JavaBean的应用 实例55 在JSP中应用JavaBean 实例56 用HTML表单设置JavaBean的属性值 实例57 计数器JavaBean 实例58 查询...
也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息...
我们可以在运行引擎优化顾问前运用sqlserver profiler记录一些事件,然后将跟踪结果存储为文件或者数据表,然后把这些提供给数据库引擎优化顾问,让它去分析。 提出合理的物理设计结构,物理设计结构包括数据库中...
单选题5:建立在业务处理系统TPS之上,针对企业各种事务的集成的信息系统是管理信息系统(A)。管理信息系统是指面向管理层的信息系统,用于支持企业的管理决策,并且具有信息的集成性和实时性。 单选题6:建立在...