1. --1.) 创建测试用的表(testTable)
  2. if exists (select * from sysobjects where name='testTable')
  3. drop table testTable
  4. GO
  5. Create Table testTable
  6. (
  7. testField varchar(50)
  8. )
  9.  
  10. select * from testTable
  11.  
  12. --2.) 创建基于表(testTable)的触发器(testTrigger)
  13. IF EXISTS (Select name FROM sysobjects Where name = 'testTrigger' AND type = 'TR')
  14. Drop TRIGGER testTrigger
  15. GO
  16. Create Trigger testTrigger
  17. ON testTable
  18. for Insert,Delete,Update
  19. AS
  20. if exists(select * from inserted)
  21. if exists(select * from deleted)
  22. print '...更新'
  23. else
  24. print '...插入'
  25. else
  26. if exists(select * from deleted)
  27. print '...删除'
  28. Go
  29.  
  30. --.) 操作testTable表,测试触发器testTrigger
  31. --分别执行Insert Into语句,Update语句,Delete语句,看看效果
  32. Insert Into testTable values ('testContent!')
  33.  
  34. Update testTable Set testField = 'UpdateContent'
  35.  
  36. Delete From testTable
  37.  
  38. select * from testTable
  39.  
  40. --用到的功能有:
  41. --1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
  42. --2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录,等等。
  43.  
  44. --这时候可以用到触发器。对于需求1,创建一个Update触发器:
  45.  
  46. Create Trigger truStudent
  47.  
  48. On student --在Student表中创建触发器
  49. instead of Update --为什么事件触发
  50. As --事件触发后所要做的事情
  51. if Update(stuID)
  52. begin
  53.  
  54. Update borrow
  55. Set stuID=i.stuID
  56. From borrow as br , Deleted as d ,Inserted as i --DeletedInserted临时表
  57. Where br.stuID=d.stuID
  58.  
  59. end
  60.  
  61. drop trigger truStudent
  62. UPDATE student set stuID='' WHERE stuID=''
  63.  
  64. Create trigger trdStudent
  65. On Student
  66. instead of Delete
  67. As
  68. Delete Borrow
  69.    From Borrow as br , Deleted as d Where br.StuID=d.stuID
  70.  
  71. drop trigger trdStudent
  72. delete FROM student WHERE stuID=''
  73.  
  74. disable trigger trdStudent on Student
  75.  
  76. select * from book
  77. select * from borrow
  78. select * from student
  79.  
  80. --创建触发器(对删除表的约束)
  81. create trigger droptabel
  82. on database
  83. for drop_table
  84. as
  85. print'删除表吗?'
  86. print'不能删除表'
  87. rollback transaction
  88. go
  89.  
  90. drop table students
  91. disable trigger droptabel on database    --关闭触发器
  92. enable trigger droptabel on database
  93.  
  94. CREATE TABLE students --学生信息表
  95. (
  96. stuID CHAR(10) primary key, --学生编号
  97. stuName CHAR(10) NOT NULL , --学生名称
  98. major CHAR(50) NOT NULL --专业
  99. )
  100. GO
  101.  
  102. CREATE TABLE borrowS --借书表
  103. (
  104. borrowID CHAR(10) primary key, --借书编号
  105. stuID CHAR(10) NOT NULL, --学生编号
  106. BID CHAR(10) NOT NULL,--图书编号
  107. T_time datetime NOT NULL, --借出日期
  108. B_time datetime --归还日期
  109. )
  110. GO
  111.  
  112. SElect * from students
  113. select * from borrows
  114.  
  115. Create Trigger truStudents
  116.  
  117. On students --在Student表中创建触发器
  118. for Update --为什么事件触发
  119. As --事件触发后所要做的事情
  120. if Update(stuID)
  121. begin
  122.  
  123. Update borrows
  124. Set stuID=i.stuID
  125. From borrows as br , Deleted as d ,Inserted as i --DeletedInserted临时表
  126. Where br.stuID=d.stuID
  127.  
  128. end
  129.  
  130. UPDATE studentS set stuID='' WHERE stuID=''
  131.  
  132. Create trigger trStudent
  133. On Students
  134. for Delete
  135. As
  136. Delete borrows
  137. From borrows AS br , Deleted AS d
  138. Where br.stuID=d.stuID
  139.  
  140. drop trigger trStudent
  141.  
  142. delete from students where stuID=''

SQL触发器实例(上)的更多相关文章

  1. SQL触发器实例讲解

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Inser ...

  2. SQL触发器实例

    SQL触发器实例讲解(本文是来自百度文库) 备注:本人建了一个站特价汇,我想记录每个商品的点击量,然后按照点击量来牌名商品,想要提高效率,所以必须得用触发器,下面是本人在百度文库中的找到的学习资料,分 ...

  3. SQL触发器实例(下)

    基本语法: Create Trigger [TriggerName] ON [TableName] FOR [Insert][,Delete][,Update] AS --触发器要执行的操作语句. G ...

  4. sqlserver 触发器实例代码

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...

  5. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  6. [SQL SERVER系列]存储过程,游标和触发器实例[原创]

    自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录 declare @UserID int ) ) declare @UnitFlag i ...

  7. PL/SQL之存储过程和触发器实例

    1.Oracle存储过程实例 /*不带任何参数存储过程(输出系统日期)*/ CREATE OR REPLACE PROCEDURE output_date IS BEGIN DBMS_OUTPUT.P ...

  8. SQL触发器、事物

    触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...

  9. SQL触发器、事务

    触发器: 触发器为特殊类型的存储过程,可在执行语言事件时自动生效.SQL Server 包括三种常规类型的触发器:DML 触发器.DDL 触发器和登录触发器. 当服务器或数据库中发生数据定义语言 (D ...

随机推荐

  1. python 线程 进程 协程 学习

    转载自大神博客:http://www.cnblogs.com/aylin/p/5601969.html 仅供学习使用···· python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和 ...

  2. windows 上安装redis和windows上redis与php扩展

    1.下载redis压缩包(自己选择想要的版本,1,2地址任意选一个) 下载window版本地址1:https://github.com/dmajkic/redis/downloads 下载window ...

  3. 在linux桌面上显示图标

    把应用程序的图标添加到桌面上 左图显示了把应用程序的图标添加到桌面上的两种方法,哪种更好看? 想要把应用程序图标添加到桌面上,请先确保已设置了在桌面上显示图标,方法是: 1.安装gnome-tweak ...

  4. 【入门详解】MyBatis入门基础详解

    什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...

  5. C++宏定义不受命名空间的约束

    // xxx.h namespace A { #define xxx() xxxxx } // 在其他文件中,引入xxx.h文件,使用宏定义时,不需要加命名空间 // yyy.cpp #include ...

  6. SQLServer中round函数

    ---SQL四舍五入问题1: SELECT CAST('123.456' as decimal) ---123 将会得到 123(小数点后面的将会被省略掉). ---如果希望得到小数点后面的两位.则需 ...

  7. 《剑指offer》第四题(二维数组中的查找)

    // 二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数,判断数组 ...

  8. notification后,程序应该如何响应

    一般来讲,点击一个notification后,都会打开一个Activity做为对点击事件的响应,这个Activity是之前在PendingIntent中设置好的. 经常玩Android手机的应该都有印 ...

  9. 使用Fragment适应不同屏幕和分辨率

    Fragment是Android3.0后增加的新控件,有点类似于Activity组件,也是用来承载各种View元素.Google增加这个 玩意的目的是为了平板电脑里面可以复用部分显示的View,只要写 ...

  10. table maker's delimma

    table maker's delimma是计算机浮点数精度的一个问题. 浮点数的表示方式 计算机能表示的数字都是有理数,所有的有理数都可以归结为下面的模式:1.@@@ × 2#### 其中,@@@ ...