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

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

1 /*DML触发器分为:   2   3 1、 after触发器(之后触发)  4   5 a、 insert触发器  6   7 b、 update触发器  8   9 c、 delete触发器*/ 10  11 /*UPDATE 触发器创建触发的语法*/ 12 CREATE TRIGGER trigger_name 13 ON table_name 14 [WITH ENCRYPTION] 15 FOR [DELETE, INSERT, UPDATE] 16 AS 17 --T-SQL语句 18 GO 19  20 /*创建insert触发器,在上网记录表recordInfo上创建插入触发器*/ 21 create trigger tr_insert_recordInfo 22 on recordInfo 23 for insert 24 as 25 /*定义变量,用于临时存储插入的会员号、电脑编号和卡的编号*/ 26 declare @cardId char(10) 27 declare @PCId int 28 declare @CardNumber char(10) 29 /*从inserted临时表中获取插入的记录行的信息,包括电脑的编号、卡的编号*/ 30 select @PCId=PCId,@cardId=CardId from inserted 31 /*根据电脑编号修改电脑的使用状态*/ 32 update PCInfo set PCUse=1 where PCId=@PCId 33 /*根据卡的编号查询会员号*/ 34 select @CardNumber=CardNumber from cardinfo where CardId=@cardid 35 /*显示上机成功的信息*/ 36 print '上机成功!会员号是:'+@CardNumber+'机器号是:'+convert(char(10),@PCId) 37 go 38 ----插入测试数据,会员号为的上机 39 set nocount on --不显示sql语句影响的记录行数 40 declare @CardId int ---声明一个存储卡的编号的变量 41 ---根据会员号查处卡的编号 42 select @cardId=cardid from cardinfo where cardNumber='c'  43 ---向recordInfo表中插入一条记录信息,卡的编号、电脑编号和上机时间 44 insert into recordInfo(cardId,PCId,beginTime) values(@cardId,,getDate()) 45 ----查看结果 46 select * from recordInfo 47 select * from PCInfo 48 go 49  50 ---创建delete触发器,在上网记录表RecordInfo上创建删除触发器 51 create trigger tr_delete_recordInfo 52 on recordInfo 53 for delete 54 as 55 if exists(select * from sysobjects where name='backRecordInfo') 56 ----如果backrecordInfo表存在,就添加记录即可 57 insert into backRecordInfo select * from deleted 58 else 59 ----创建backRecordInfo表,从deleted中获取被删除的数据 60 select * into backRecordInfo from deleted 61 print'backRecordInfo表备份数据成功,备份表中的数据为:' 62 select * from backRecordInfo 63 go 64 ----测试delete触发器,删除数据 65 set nocount on 66 delete from recordInfo 67 ---查看结果 68 print'记录表中的数据为:' 69 select * from recordInfo 70 go 71  72 ----update触发器示例 73 create trigger tr_update_recordInfo 74 on recordInfo 75 for update 76 as 77 declare @beforePCId int 78 declare @afterPCId int 79 select @beforePCId =PCId from deleted 80 select @afterPCId=PCID from inserted 81 ---根据电脑编号修改使用状态----- 82 ---根据以前使用的电脑编号把电脑的使用状态改为: 83 update PCInfo set PCUse=0 where PCId=@beforePCId 84 ---根据现在使用的电脑编号把电脑的使用状态改为: 85 update PCInfo set PCUse=1 where PCId=@afterPCId 86 ----显示电脑换机成功 87 print'换机成功!从'+convert(varchar(10),@beforePCId)+'号电脑换到'+convert(varchar(10),@afterPCId)+'号电脑' 88 go 89 /*测试update触发器,修改电脑编号*/ 90 --显示更改前,记录表中的数据 91 print'更改前,记录表中的数据' 92 select * from recordInfo 93 --显示更改前,电脑表中的数据 94 print'更改前,电脑表中的数据' 95 select * from PCInfo 96 set nocount on 97 ---把电脑号为的改为 98 update recordInfo set PCId= where PCId=  99 ---查看结果100 print'更改后,记录表中的数据'101 select * from recordInfo102 print'更改后,电脑表中的数据'103 select * from PCInfo104 105 --instead of 触发器可以同时在数据表和视图中使用。通常在以下几种情况下,建议使用instead of触发器: 106 --1、数据库里的数据禁止修改:例如电信部门的通话记录是不能修改的,一旦修改,则通话费用的计数将不准确。 107 --2、有可能要回滚修改的SQL语句108 --3、在视图中使用触发器109 --4、用自己的方式去修改数据110 ----instead of触发器示例111 ---创建update触发器,在上网记录表recordInfo上创建修改(列)触发器112 create trigger tr_updateColum1_recordInfo113 on recordInfo114 instead of insert115 as116 declare @cardbalance int --声明用于存储用户余额的变量117 declare @CardId int --声明用于存储用户卡的编号的变量118 declare @PCId int --声明用于存储电脑编号的变量119 ---inserted临时表中获取插入的记录行信息,包括电脑编号、卡的编号120 select @cardId=cardId,@PCId=PCId from inserted121 select @cardbalance=cardBalance from cardInfo where CardId=@CardId122 print'您的余额为:'+convert(varchar(10),@cardBalance) ---打印余额信息123 if(@cardBalance<2) ---判断余额多少,看能否正常上机124 print'余额小于元,不能上机。请尽快充值!'125 else126 ----根据电脑的编号修改电脑的使用状态更改为正在使用127 update PCInfo set PCUse=1 where PCId=@PCId128 ----向recordInfo表插入上机记录129 insert into recordInfo(cardId,PCId,beginTime)values(@CardId,@PCId,getdate())130 print'上机成功'131 go132 -------关键代码------133 set nocount on134 declare @cardId int ---声明一个存储卡的编号的变量135 ---根据会员号查出卡的编号136 select @cardId=cardId from cardInfo where cardNumber='c001'137 ----向recordInfo表中插入一条记录信息,卡的编号、电脑的编号和上机时间138 insert into recordInfo(cardId,PCId,beginTime)values(@cardId,1,getdate())139 select * from recordInfo140 select * from PCInfo141 go

 

转载于:https://www.cnblogs.com/ziranquliu/p/5458441.html

你可能感兴趣的文章
HTTP中的URL长度限制(资料整理)
查看>>
Nhbernate
查看>>
java Socket通信简单实例
查看>>
洛谷P2574 XOR的艺术 线段树 区间修改 区间求和询问
查看>>
ERROR: `elasticsearch` directory is missing in the plugin zip
查看>>
js 各种逻辑坑
查看>>
git 使用笔记
查看>>
java.util.Date和java.sql.Date的区别及应用
查看>>
[SCOI2007]蜥蜴
查看>>
跨平台图表控件TeeChart使用教程:将图表数据导出为XML格式
查看>>
HTML5 鼠标拖拽以及web存储
查看>>
Xamarin iOS教程之页面控件
查看>>
关于web.xml不同版本之间的区别
查看>>
HBase设计规范(转载)
查看>>
基础设施即服务系列:在Windows Azure虚拟机上运行SQL Server
查看>>
Android的七巧板Activity之二 Activity的加载模式
查看>>
[技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
查看>>
linux下转换U盘文件系统
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(10)
查看>>
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月9日-7月15日)
查看>>