博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL触发器
阅读量:4913 次
发布时间:2019-06-11

本文共 2553 字,大约阅读时间需要 8 分钟。

--创建交易详细表 use MoneyManager if(exists(select * from sysobjects where name='transinfo'))    drop table transinfo create table transinfo (    id varchar(20) primary key not null,    transdate date,    tarnstype nvarchar(2),    transmoney money,    remark nvarchar(256) ) go --给表transinfo创建插入触发器,给交易表插入一条交易信息,更新账户余额。 alter trigger tg_transifno_insert on transinfo after insert --for等价于after是已经插入基表,可以回滚回去。instead of 还没有插入基表 as declare @userid varchar(20) declare @money money declare @type nvarchar(2) declare @yue money set nocount on select @userid=id,@money=transmoney,@type=tarnstype from inserted if(@type='支取') begin               select  @yue=[money] from t_money where userid=@userid       print('支取前的余额是:'+convert(varchar(10),@yue))       update t_money set [money]=[money]-@money where userid=@userid       print('支取了:'+convert(varchar(10),@money))       select  @yue=[money] from t_money where userid=@userid       print('支取后的余额是:'+convert(varchar(10),@yue)) end else if(@type='存入') begin               select  @yue=[money] from t_money where userid=@userid        print('存入前的余额是:'+convert(varchar(10),@yue))        update t_money set [money]=[money]+@money where userid=@userid        print('存入了:'+convert(varchar(10),@money))        select  @yue=[money] from t_money where userid=@userid        print('存入后的余额是:'+convert(varchar(10),@yue)) end go --测试语句 insert into transinfo values (2222,GETDATE(),'支取',300,''); go --给表transinfo创建删除触发器,删除一条交易信息,并备份到transbacktable表 alter trigger tg_transinfo_delete on transinfo for delete as    set nocount no    if(not Exists(select * from sysobjects where name='transbacktable'))    begin     select * into transbacktable from deleted     end     else     begin        insert into transbacktable select * from deleted     end  go --测试语句    delete from dbo.transinfo where id='2222' go  --给表t_money创建更新发器,单笔交易大于500就停止交易  create trigger tg_t_money_update  on t_money  for update  as    set nocount no    declare @beformoney money    declare @aftermoney money    select @beformoney=[money] from deleted    select @aftermoney=[money] from inserted    if(abs(@aftermoney-@beformoney)>500)    begin        raiserror('单笔交易不能大于500',16,1)        rollback transaction    end go --测试语句 update t_money set [money]=[money]+500 go  --给表transinfo的transdate列创建更新发器,禁止更新  create trigger tg_transinfo_transdateupdate  on transinfo  for update  as  set nocount on  if(update(transdate))  begin      raiserror('禁止更改交易时间',16,1)      rollback transaction  end  go

 

转载于:https://www.cnblogs.com/zcttxs/archive/2013/05/05/3061249.html

你可能感兴趣的文章
有效的更改IE、Firefox、Chrome浏览器缓存位置的方法
查看>>
SQL*Plus 系统变量之7 - BLO[CKTERMINATOR]
查看>>
MATLAB 统计数据并画出统计直方图
查看>>
TTTTTTTTTTTTTTTTT CF #182 div1 B floyd
查看>>
adbi命令【转】
查看>>
jQuery----选择器1
查看>>
SpringPython之AOP
查看>>
Piggy-Bank
查看>>
不加好友就能微信聊天?微信企业号实现了!
查看>>
实现左边div固定宽度,右边div自适应撑满剩下的宽度的布局方式:
查看>>
UVA 104 Arbitrage
查看>>
thinphp使用模型左右链接,表前缀不同处理
查看>>
混合 Data Warehouse 和 Big Data 倉庫的新架構
查看>>
几种开放源码的TCPIP协议栈概述--LwIP,uIP,TinyTcp和uC/IP
查看>>
win10升级相关
查看>>
LVS负载均衡服务
查看>>
phpadmin dvwa sqli-labs xsser.me
查看>>
OPENCV(2) —— Basic Structures(二)
查看>>
SDUT 3346 数据结构实验之二叉树七:叶子问题
查看>>
正则表达式介绍
查看>>