`

在存储过程中运用事务

 
阅读更多

在存储过程中运用事务


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

分享到:
评论

相关推荐

    互联网Python与MySQL基础入门

    在本教程中,我们将为您介绍MySQL的基本概念、安装与配置、SQL语言、数据库表的设计与操作、索引、存储过程和触发器等知识。 Python操作MySQL数据库 掌握Python与MySQL的操作是开发高效数据库应用的关键。在本教程中...

    基于大数据的基础教育管理.pdf

    二、基础教育大数据应用的具体思路 在基础教育运用大数据进行事务管理的过程中主要将其 运用到数据的采集与整合中了,由此更好地实现信息数据构 建的体系化,为推动数据运用发展奠定良好基础。 2.1 应用之前,做好...

    ATM取款机系统数据库设计(sql)

    学会运用存储过程和case,while循环和运用变量和视图,索引和事务

    SQL server 管理事务和数据库介绍

    用SQL server 处理数据库,主要就是和数据库还有处理数据库的事务打交道,如何管理好数据库这个对象和处理数据库的事务过程,是我们运用好SQL server非常关键的一点,下边是我对管理事务和数据库这章的总结。...

    精通SQL--结构化查询语言详解

    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触发器的种类...

    精通SQL 结构化查询语言详解

    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# 运用游标,事务,存储过程,触发器

    SQL sever 实训

    --创建存储过程P_Sale3,能够根据指定的产品编号和日期,以输出参数的形式得到该产品的销售金额 CREATE PROCEDURE P_Sale3 @ProNo nvarchar(5),@SaleDate DateTime,@MONEY Decimal(8,2)OUTPUT AS SET @MONEY=( ...

    C#开发经验技巧宝典

    0987 在ADO.NET中实现数据库的事务处理 574 0988 将任意文件保存到数据库中 574 0989 将存储在数据库中的文件提取出来 575 0990 合并具有相同数据表结构的查询结果 575 0991 使用DataTable进行数据检索 ...

    WMS仓库管理系统.pptx

    仓库管理系统介绍 WM系统支持内容: 定义和管理仓库中的存储区和仓位 处理所有的记帐和事务, 如收货,发货和一般的转储等 对库存的变动情况进行监测 按仓位进行存储 确保在存储管理系统中的记帐与仓库中的实际库存...

    oracle教案(doc)+SQL Reference 10g(chm).rar

    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是如何处理...

    数据库课程设计(5).doc

    " "(2)数据库开发(选做) " "在数据库设计的基础上开发一个基本的数据库应用系统,要求有基本的数据查询功能 " "和数据管理功能,并能将存储过程、触发器、事务控制等运用其中。开发工具学生可 " "以自己选择。 ...

    实验六-触发器实验报告.doc

    如果由触发器调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。 ALTER ...

    VMware服务器虚拟化功能介绍.doc

    在迁移过程中,VMotion只是在 点阵图里对信息交换进行监控,所以整个转移过程对用户来说是透明的。一旦整个存和 系统状态全部复制到目标ESXi服务器中,VMotion就会自动终止源虚拟机,同时将点阵图 转移到目标ESXi...

    jsp网络编程从基础到实践

    实例52 调用存储过程 实例53 事务处理 实例54 利用连接池访问数据库 第8章 JSP中JavaBean的应用 实例55 在JSP中应用JavaBean 实例56 用HTML表单设置JavaBean的属性值 实例57 计数器JavaBean 实例58 查询...

    JSP网络编程从基础到实践 实例代码

    实例52 调用存储过程 实例53 事务处理 实例54 利用连接池访问数据库 第8章 JSP中JavaBean的应用 实例55 在JSP中应用JavaBean 实例56 用HTML表单设置JavaBean的属性值 实例57 计数器JavaBean 实例58 查询...

    JSP网络编程从基础到实践的实例代码

    实例52 调用存储过程 实例53 事务处理 实例54 利用连接池访问数据库 第8章 JSP中JavaBean的应用 实例55 在JSP中应用JavaBean 实例56 用HTML表单设置JavaBean的属性值 实例57 计数器JavaBean 实例58 查询...

    asp.net知识库

    也论该不该在项目中使用存储过程代替SQL语句 如何使数据库中的表更有弹性,更易于扩展 存储过程——天使还是魔鬼 如何获取MSSQLServer,Oracel,Access中的数据字典信息 C#中利用GetOleDbSchemaTable获取数据库内表信息...

    SQLServer安全及性能优化

    我们可以在运行引擎优化顾问前运用sqlserver profiler记录一些事件,然后将跟踪结果存储为文件或者数据表,然后把这些提供给数据库引擎优化顾问,让它去分析。  提出合理的物理设计结构,物理设计结构包括数据库中...

    基于JSP的人事管理系统毕业论文

    工具以及 Tomcat 服务器和 MYSQL 数据库,运用 J2EE 三大框架中的 struts 框架 组建了一个简易的人事管理系统,它有查看,添加,删除,修改员工基本信息, 对应员工工资发放情况以及公司部门管理设置的基本功能。本...

Global site tag (gtag.js) - Google Analytics