`
caleb_520
  • 浏览: 252634 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

SQL Server2005触发器模拟ATM机存取钱的功能

SQL 
阅读更多
根据上面的简单介绍,我们举一个例子。
以下是一个银行系统的二张表:
银行卡信息表(卡号、银行名称、帐户名、密码、余额)
交易信息表(交易号、卡号、交易日期、交易类型、金额),交易类型分“存入”、“支取”和“转账“

创建一个触发器,该触发器可以根据交易信息表内容的变化而修改银行卡的余额信息

表信息如下:
create table cardInfo
(
CardID char(10) primary key,
BankName varchar(20) not null,
UserName varchar(20) not null,
password varchar(20) not null,
Balance money not null
)

create table tradeInfo
(
TradeID int identity(1,1) primary key,
CardID char(10) references cardinfo(cardid),
TradeDate DateTime  not null,
TradeMoney Money,
TradeType char(10) 
)

--identity(1,1)
--代表主键自增长
--参数1,代表主键的初始值
--参数2,代表每次在原来基础增加多少


插入数据如下:
insert into cardinfo values
('123456','中国银行','哈密瓜','123456',100000)


有了以上的数据,我们开始设计一个存储过程来完成存钱、取钱、转账的操作

思路如下:
--交易信息类型
--1、存钱 2、取钱 3、转账
--TradeType

--存钱操作:insert --> 对银行卡的操作:update
--取钱操作:insert --> 对银行卡的操作:update
--转账操作:insert --> 对银行卡的操作:update已经存在的另一个卡更新
--生成一个交易流水号

存储过程代码:

create procedure trade_proc
@v_cardid char(10),
@v_trademoney money,
@v_tradetype char(10)
as
declare @a varchar(10)
set @a = rtrim(@v_cardid)
if not exists (select cardid from cardInfo where cardid = @a)
begin
print '你输入的卡号不存在,请重新输入'
end
else
begin
insert into tradeinfo (cardId,tradedate,trademoney,tradetype)
values (@a,getdate(),@v_trademoney,@v_tradetype)
end


触发器代码如下:

create trigger tradeinfo_trigger on tradeinfo
for insert
as
begin
declare @v_tradetype char(10) --获取交易类型
declare @v_trademoney money --获取交易的money
declare @v_cardid char(10) --银行卡的id
declare @v_Balance money --余额
set @v_tradetype=(select tradetype from inserted)
set @v_trademoney=(select trademoney from inserted)
set @v_cardid=(select cardid from inserted)
set @v_Balance=(select Balance from cardinfo where cardid = @v_cardid)
if @v_tradetype = '取钱' and @v_trademoney <= @v_Balance
begin
update cardinfo set Balance=@v_Balance-@v_trademoney where cardid=@v_cardid
end
else if @v_tradetype = '存钱'
begin
update cardinfo set Balance=@v_Balance+@v_trademoney where cardid=@v_cardid
end
else 
begin
rollback transaction --如果操作失败(所有存钱、取钱过程终止,且数据不进行数据库中)
end
end


执行存储过程:exec trade_proc '123456',1000,'存钱'

执行结果:
123456            中国银行        哈密瓜          123456        101000.00

4        123456            2011-03-30 15:45:24.547        1000.00        存钱 
0
0
分享到:
评论

相关推荐

    sqlserver2005触发器

    sqlserver2005触发器sqlserver2005触发器sqlserver2005触发器

    基于sql server 2005的触发器的创建及操作

    在SQL Server 2005中,触发器是一种特殊的存储过程,它在特定的数据操作语言(DML)事件,如INSERT、UPDATE或DELETE发生时自动执行。触发器可以帮助实现复杂的业务规则和数据完整性,通过扩展SQL语句的功能,提供了...

    sqlserver 创建触发器 远程服务器相应执行SQL语句

    ### SQL Server 创建触发器实现远程服务器相应执行SQL语句 #### 概述 本文将详细介绍如何在SQL Server中创建触发器来实现当本地数据库发生数据插入时,在远程服务器上相应地执行SQL语句,实现数据同步。这通常用于...

    16.sql.server.2005.触发器 16.sql.server.2005.触发器

    SQL Server 2005中的触发器是一种数据库对象,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为DML(数据操纵语言)事件,触发器则提供了对这些事件的响应...

    SqlServer触发器调用WebService

    ### SqlServer触发器调用WebService知识点详解 #### 一、SqlServer触发器简介 在了解如何通过Sql Server触发器调用WebService之前,我们首先需要对触发器有一个基本的认识。触发器是一种特殊的存储过程,它被定义...

    sqlserver2000触发器

    SQL Server 2000 触发器是数据库管理系统中的一种重要特性,它允许数据库管理员在特定的数据库操作(如INSERT、UPDATE、DELETE)发生时执行预定义的T-SQL语句序列。触发器可以被看作是数据库的自动响应机制,类似于...

    SQLserver08触发器

    SQL Server Management Studio (SSMS) 提供了调试触发器的功能,可以在触发器执行过程中设置断点并检查变量值。 通过深入理解SQL Server 2008的触发器,开发者可以更好地控制数据库行为,实现复杂的业务逻辑和数据...

    如何制定自己的SQL Server 2000触发器

    SQL Server 2000 触发器详解 SQL Server 2000 触发器是一种特殊的存储过程,类似于事件函数,可以在查询分析器里创建,也可以在表名上点右键-&gt;“所有任务”-&gt;“管理触发器”来创建。下面详细讲解如何制定自己的...

    sql server 2005第十二课(sql server触发器)

    SQL Server 2005是微软推出的一款关系型数据库管理系统,它在企业级数据管理和分析中扮演着重要的角色。在SQL Server中,触发器是一种特殊的存储过程,它们在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时...

    ATM机模拟系统、SQL Server 2005

    总的来说,这个ATM机模拟系统利用了SQL Server 2005的强大功能,包括数据存储、查询处理、事务管理、安全性控制和性能优化,为用户提供了一个接近真实的银行服务体验。开发者通过分享这个项目,不仅展示了数据库管理...

    Microsoft SQL Server 2005 向后兼容组件SQLServer2005_BC.msi

    SQLServer2005_BC.msi 文件是这个向后兼容组件的安装程序,它包含了用于在更新的SQL Server环境中模拟SQL Server 2005环境的特定库和接口。安装此组件后,用户可以继续使用那些设计时依赖SQL Server 2005特性的应用...

    SQL Server 2005编程入门经典-触发器和存储过程教程

    2. 存储过程触发事件:通过在存储过程中调用动态SQL,可以模拟触发器的行为,但这种方法不推荐,因为可能引发安全风险和性能问题。 五、学习资源与实践 学习SQL Server 2005的触发器和存储过程,除了阅读《SQL ...

    SQLServer视图触发器

    SQLServer视图触发器

    SqlServer触发器写法案例

    ### SqlServer触发器详解与案例分析 #### 一、触发器概述 触发器是一种特殊类型的存储过程,它被定义为当特定的事件(如数据的插入、更新或删除)发生时自动执行。Sql Server 中的触发器可以用来强制业务规则或者...

    SQL Server 利用触发器对多表视图进行更新的实现方法

    在SQL Server中,触发器是一种特殊的存储过程,它在数据更改操作(如INSERT、UPDATE或DELETE)发生时自动执行。本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的...

    sql server触发器.rar

    SQL Server触发器是数据库管理系统中一种非常重要的特性,它允许开发者在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时执行自定义的SQL代码。这些操作被称为触发事件,而触发器则是对这些事件的响应。理解并...

    SQL server 触发器实例

    SQL Server中的触发器是一种特殊的存储过程,它在特定的数据库操作(如INSERT、UPDATE或DELETE)发生时自动执行。触发器的设计目的是为了实现数据的完整性,确保在数据修改时执行额外的业务规则或逻辑。 首先,让...

    SQLServer触发器语法.pdf

    SQL Server 触发器语法详解 SQL Server 触发器是数据库管理系统中的一种机制,用于在执行某些操作时自动执行特定的操作。触发器可以帮助维护数据的一致性和完整性,提高数据库的安全性和可靠性。本文将详细介绍 SQL...

    SQL Server 2005编程入门经典(第2版)之存储过程-触发器.pdf

    《SQL Server 2005编程入门经典(第2版)》是一本深入浅出的教程,涵盖了数据库管理系统SQL Server 2005的核心概念和技术。本书的重点在于讲解存储过程和触发器,这两个是数据库开发中至关重要的组件,用于实现复杂的...

    SQL SERVER 触发器视频讲解

    在SQL Server中,触发器是一种特殊的存储过程,它在数据库中的特定事件发生时自动执行,如数据插入、更新或删除操作。本视频讲解将深入探讨触发器的创建、编辑、修改及其功能,帮助用户更好地理解和应用这些技术。 ...

Global site tag (gtag.js) - Google Analytics