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 recordInfo
  102. print'更改后,电脑表中的数据'
  103. select * from PCInfo
  104.  
  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_recordInfo
  113. on recordInfo
  114. instead of insert
  115. as
  116. declare @cardbalance int --声明用于存储用户余额的变量
  117. declare @CardId int --声明用于存储用户卡的编号的变量
  118. declare @PCId int --声明用于存储电脑编号的变量
  119. ---inserted临时表中获取插入的记录行信息,包括电脑编号、卡的编号
  120. select @cardId=cardId,@PCId=PCId from inserted
  121. select @cardbalance=cardBalance from cardInfo where CardId=@CardId
  122. print'您的余额为:'+convert(varchar(10),@cardBalance) ---打印余额信息
  123. if(@cardBalance<2) ---判断余额多少,看能否正常上机
  124. print'余额小于元,不能上机。请尽快充值!'
  125. else
  126. ----根据电脑的编号修改电脑的使用状态更改为正在使用
  127. update PCInfo set PCUse=1 where PCId=@PCId
  128. ----向recordInfo表插入上机记录
  129. insert into recordInfo(cardId,PCId,beginTime)values(@CardId,@PCId,getdate())
  130. print'上机成功'
  131. go
  132. -------关键代码------
  133. set nocount on
  134. 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 recordInfo
  140. select * from PCInfo
  141. go

SQLSever 触发器的更多相关文章

  1. SQLSEVER 不同服务器下两个结构相似的表实现数据同步(触发器)

    1.建立链接服务器 在ServerA 中创建指向ServerB的链接服务器,并做好账号映射.addlinkedserver存储过程创建一个链接服务器,参数详情参见官方文档. 第1个参数LNK_Serv ...

  2. SQLSEVER 同台服务器下不同表 触发器实现数据实时同步

    触发器的使用: 1.首先建立两个相同结构的表,两个表明的列的名称不同. student_01   字段  name  ;  字段 age  ; 字段  class ; student_02   字段  ...

  3. SQLSEVER在存储过程或触发器中模糊查询拼接

    declare @name nvarchar(50); declare @name_pin nvarchar(50); set @name_pin = '%'+@name +'%' 模糊查询: sel ...

  4. SqlSever数据库实践周

    资源下载 进行了为期5天的数据库设计,虽然以前用过数据库,但是这一次是使用书上规范的设计流程设计的数据库,感觉有必要记录一下,希望对其他人有帮助. 我的收获:在这个博客中会体现到我的收获,对于将要进行 ...

  5. MySQL中的存储过程、函数与触发器

    一.对待存储过程和函数的态度 优点: 1.存储过程只在创建时进行编译,sql语句则每次执行都需要编译.能提高数据库执行速度. 2.简单复杂操作结合事物一起封装. 3.复用性高. 4.安全性高,可指定存 ...

  6. pt-online-schema-change中update触发器的bug

    pt-online-schema-change在对表进行表结构变更时,会创建三个触发器. 如下文测试案例中的t2表,表结构如下: mysql> show create table t2\G . ...

  7. MySQL主从环境下存储过程,函数,触发器,事件的复制情况

    下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...

  8. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  9. MSSQL 事务,视图,索引,存储过程,触发器

    事务 事务是一种机制.是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行. 在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.这特别适用于多用户同时操作的数据 ...

随机推荐

  1. PHP continue和break的用法(深入理解)

    对于刚入门的PHP童鞋们来说,在循环体中的continue和break的作用总是分不清到底是什么意思, 怎么用, 两者到底有什么区别? 接下来说几个例子,其实它们是很好区分的. <?php $t ...

  2. 调整图像的亮度和对比度—opencv

    1.理论基础 两个参数  和  一般称作 增益 和 偏置 参数.我们往往用这两个参数来分别控制 对比度 和 亮度 . 你可以把  看成源图像像素,把  看成输出图像像素.这样一来,上面的式子就能写得更 ...

  3. easypoi 一行代码搞定excel导入导出

    开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子[easypoi],下面介绍下“轮子”的使用. pom ...

  4. sql查询题目

    --1.查询在1981年入职的员工信息select * from emp where hiredate between '01-1月-1981'and '31-12月-1981'; select * ...

  5. IE浏览器调用ActiveX获取U盘中的文件

    <p> <script type="text/javascript" language="javaScript">// <![CD ...

  6. 安装macports

    Mac下面除了用dmg.pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样.MacPorts就像apt-get.yum一样,可以快速安装些软件 ...

  7. VS Extension+NVelocity系列(一)——构建一个简单的NVelocity解析环境

    一.前言 本节我们将实际实现一个简单的NVelocity解析环境,以便为以后的实例做一些基本工作,虽然NVelocity如何使用已经属于老掉牙的话题,但我只能专门挑出来一章来做铺垫.人生就是这样无奈啊 ...

  8. 剑指Offer - 九度1369 - 字符串的排列

    剑指Offer - 九度1369 - 字符串的排列2014-02-05 21:12 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所 ...

  9. 剑指Offer - 九度1389 - 变态跳台阶

    剑指Offer - 九度1389 - 变态跳台阶2013-11-24 04:20 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳 ...

  10. springboot注解使用,分页sql

    https://blog.csdn.net/KingBoyWorld/article/details/78948304