根据上面的简单介绍,我们举一个例子。
以下是一个银行系统的二张表:
银行卡信息表(卡号、银行名称、帐户名、密码、余额)
交易信息表(交易号、卡号、交易日期、交易类型、金额),交易类型分“存入”、“支取”和“转账“
创建一个触发器,该触发器可以根据交易信息表内容的变化而修改银行卡的余额信息
表信息如下:
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 存钱
分享到:
相关推荐
sqlserver2005触发器sqlserver2005触发器sqlserver2005触发器
以sql server 2005为例介绍如何通过管理器和T-SQL创建触发器。
sql server 用语句停用全部触发器, 也可启用全部触发器
16.sql.server.2005.触发器 16.sql.server.2005.触发器
sqlserver2000触发器,东西比较老,有些童鞋装不了高版本的 可以看看
sql server 触发器 数据库 sql server 触发器 数据库
SQL Server2005触发器在图书管理系统中的应用研究.pdf
CREATE TRIGGER TT ON TSYS_BAMKZ FOR INSERT AS INSERT TSYS_MKZ SELECT B.MKZM,A.yhz,B.PARENT FROM (SELECT DISTINCT yhz FROM TSYS_MKZ) A,INSERTED B
SQLServer视图触发器
SQLServer2005数据库触发器应用SQLServer2005数据库触发器应用
SQL Server 2005触发器在数据库开发中的应用.pdf
利用SQL Server 2005触发器保证数据完整性之研究.pdf
自己没事时做的一个模拟ATM机存取款、转账系统,用SQL Server 2005做的,好东西拿出来给大家一起分享一下,希望对大家用用处!
NULL 博文链接:https://lytlove68.iteye.com/blog/677675
sqlserver 触发器 insert阿 一个关于触发器的小例子
sqlserver触发器例子 一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约`束。 二﹕ SQL ...
一 触发器介绍 二1创建触发器 2修改触发器 3 开启/禁用触发器 4删除触发器
用sql server 2000 触发器实现进销存
适合开始学习写sql 触发器的同学;一看就会,好好看吧!!