触发器:即当发生某一事件时,如果满足给定条件,则执行相应的动作。

它的基本架构:

触发器创建语法:

(1)

CREATETRIGGER trigger_name

ON table|view

FOR|AFTER|INSTEADOF [DELETE][,INSERT][,UPDATE]

AS

Sql_statement[…n]

(2)

CREATETRIGGER trigger_name

ON table|view

FOR|AFTER|INSTEADOF [DELETE][,INSERT][,UPDATE]

AS

IFUPDATE(column)

[{AND|OR}UPDATE(COLUMN)][…]

IF(COLUMNS_UPDATED())

Sql_statement[…n]

注:(不同数据库支持不同的类型触发器,有些还支持before类型触发器,像SQL server 就不支持before触发器)

SQL Server 支持两种类型的触发器AFTER 触发器和INSTEAD OF 触发器,其中、

AFTER 触发器要求只有执行某一操作ISERT, UPDATE ,DELETE 之后触发器才被触

发。

1)INSTEAD OF 触发器表示并不执行其所定义的操作INSERT,UPDATE ,DELETE,而

仅是执行触发器本身,既可在表上定义INSTEAD OF 触发器,也可以在视图上定

义INSTEAD OF 触发器。

2)after  触发器(也叫“FOR”触发器)则会在触发 insert、update 或是delect 动作之

后执行。

触发事件分为三类:UPDATE、DELETE和INSERT。

另外,定义触发器时,系统都都会自动生成两张表,我们是可以直接用的,如下:

如下是实例(都是亲手实践过的):

可在这里下载数据库文件,下面实例以这个数据库为例子

我想改为0的但改不了,小伙伴可以参照便文章免费下载

也可以用百度网盘了:链接:https://pan.baidu.com/s/1gtlSrhQSBAd1rblrmU3JiA  提取码:q79b

1.在表Student中建立删除触发器,实现表Student和表SC的级联删除,也就是只要删除表Student
中的元组学号为s1,则表SC中SNO为s1的元组也要删除;建立完触发器后用企业管理器删除Student中学号
为30的元组,看看表SC中SNO为30的选课记录是否也一起删除;create trigger t_std2 on student
instead of  delete
as
begindeclare @id char(5)select @id=sno from deleteddelete from sc where SNo =@iddelete from student where SNo=@idendgodelete from Student where SNo='00002'
/*2. 在表Course中增加一个职业规划选修课,为(005,职业规划,4,0014),在表SC中建立一个触发器,
实现规定年龄24岁以上(包括24岁)的学生才能选修职业规划这门课程,如果年龄小于24岁,则输出’
年龄小于24,不能选修该门课程’,插入失败,用SQL语句在SC表中分别插入(‘00001’,’005’,null)和
(‘00005’,’005’,null)看看结果;**/
create trigger t_sc on sc
for insert
as
begindeclare @id char(5)select @id=sno from insertedif((select cno from inserted)='005' and (select sage from student where SNo= @id )<24)beginprint '年龄小于24,不能选修该门课程 'rollback transactionendelseprint 'nice!'end
insert into course values('005','职业规划','4','0014')
insert into sc values('00001','005',null)
insert into sc values('00005','005',null)
select * from sc
go
3.在表SC中建立更改触发器,实现表SC中的修改后的成绩不能低于修改前的成绩,
如果修改后的成绩低于修改前的成绩,则输出’修改后的成绩比修改前低,不能修改’,
修改失败,用SQL语句把学号为00001,课程号为001的成绩分别改为90和70,看看结果;

createtrigger t2_sc on sc

after update

as

if(update(score))

begin

declare @score1 numeric(3,1),@score2numeric(3,1)

select @score1=score from inserted

select @score2=score from deleted

if(@score1>@score2 )

print 'nice! '

else

update sc

set sc.Score=@score2 from sc,deleted

where sc.SNo=deleted.SNo andsc.CNo=deleted.CNo

print '失败'

end

update sc

setScore=70 where SNo='00001' and CNo='001'

4.   在表Teacher中创建触发器,实现如果更新了表Teacher中的年龄和工资,
则输出’更新了年龄和工资’,如果更新了年龄没有更新工资,则输出’更新了年龄’,
如果更新了工资而没有更新年龄,则输出’更新了工资’,创建完后使用SQL语句把
tno为001的年龄加1,把tno为002的工资加1,把tno为003的年龄和工资都加1,看看结果;
create trigger t_teacher on teacher
after update
as
begindeclare @age int,@sal floatselect @age=age from deletedselect @sal=sal from deletedif(@age <> (select age from inserted )and @sal <>(select sal from inserted))print '更新了年龄和工资 'else if(@age <> (select age from inserted )and @sal =(select sal from inserted))print '更新了工资 'else if(@age = (select age from inserted )and @sal <>(select sal from inserted))print '更新了年龄 'endupdate Teacherset age=age+1 where Tno='0001'**/
/**
5.   在不删除触发器的前提下,使3创建的触发器无效;
alter table teacher disable trigger t_teacher**/
/**
6.  创建一个名为tri_Delete_C的触发器,要求首先判断数据库中是否已经存在名为tri_Delete_C的触发器,
如果存在,首先删除,再创建,触发器要求删除一门课程时候,首先判断该课程有否有人选,如果有人选,
则不能删除,并通过测试数据验证该触发器的执行情况。**/
if(exists (select * from  sysobjects where xtype='tr' and name='tri_Delete_C'))
begindrop trigger tri_Delete_Cprint '已删除'endgocreate trigger tri_Delete_C on coursefor deleteas   beginif exists (select * from sc inner join deleted on sc.CNo=deleted.CNo)beginprint '不能删除'rollback transactionendendgoalter table sc drop constraint FK__sc__CNo__08B54D69delete course where CNo='001'alter table sc add constraint FK__sc__CNo__08B54D69 foreign key(cno) references course(cno) 

SQL SERVER触发器(附有实例)相关推荐

  1. SQL SERVER触发器使用实例

    --级联删除(不带外键) create trigger dept_emp_delete on dept after delete as delete from emp where deptid in ...

  2. sql 服务器实例怎样显示,SQL Server 触发器实例详解

    Microsoft SQL Server™ 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器.触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件 ...

  3. SQL Server 触发器学习总结

    SQL菜鸟入门级教程之触发器 触发器简介:   触发器(trigger)是种特殊的存储过程,它的执行不是由程序调用,也不需要手动操作,它是由事件来触发,事件大家应该非常熟悉吧,比如按钮的Click事件 ...

  4. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  5. 由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例。该连接将关闭...

    在win7 中安装VS2008开发DNN的模块,经常出现"由于启动用户实例的进程时出错,导致无法生成 SQL Server 的用户实例.该连接将关闭"的问题,在网上找了下有如下解决 ...

  6. 了解SQL Server触发器及触发器中的事务

    引述 首先,写这篇文章的目的是望能把我对触发器的理解,分享出来与大家一起学习.如果你对触发器和事务的概念有些了解,这篇文章对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,以及触发器中事 ...

  7. 【转】了解SQL Server触发器及触发器中的事务

    引述 首先, 说下我写篇文章的目的,我希望能把我对触发器的理解,分享出来与你一起学习.如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事, ...

  8. SQL Server触发器创建、删除、修改、查看

    http://blog.csdn.net/tianwailaibin/article/details/8111766 本教程为大家介绍SQL Server触发器创建.删除.修改.查看方法. 一.触发器 ...

  9. mysql 触发器 sql server_喜忧参半的SQL Server触发器

    SQL Server触发器在非常有争议的主题.它们能以较低的成本提供便利,但经常被开发人员.DBA误用,导致性能瓶颈或维护性挑战. 本文简要回顾了触发器,并深入讨论了如何有效地使用触发器,以及何时触发 ...

  10. 如何修改 SQL Server 中的实例名 ?

    在微软的社区也看到了这个问题: https://social.msdn.microsoft.com/Forums/en-US/c59b0840-1595-456a-b77e-d95b1a2a9097/ ...

最新文章

  1. C-二维数组,多维数组
  2. 关于新版SDK报错You need to use a Theme.AppCompat theme的两种解决办法 - 转
  3. SHA256安全散列算法
  4. Redux其实很简单(原理篇)
  5. dos命令行输入adb shell命令为什么报错
  6. junit测试起名字规则_如何在JUnit 5中替换规则
  7. Spring JDBC和JdbcTemplate CRUD与DataSource示例
  8. MIT 算法导论 (二)Math Notation
  9. Helm 架构 - 每天5分钟玩转 Docker 容器技术(161)
  10. 2017级C语言大作业 - 密室逃生
  11. Excel数据分析案例一——业绩达成分析
  12. VMware安装CentOS 7.0 Fail to start media check on /dev/sr0
  13. 逆流而上:计算机专业图书破圈营销,这个直播间做到了
  14. android 小说下载器 源码 分享
  15. 【- Flutter 桌面篇 -】 FlutterUnit win版闪亮登场
  16. 使用VisualStudio读写NI FPGA板卡实例(基于FPGA Interface C API Generator)
  17. awk 中使用 OFS.
  18. JavaC++题解与拓展——leetcode728.自除数【跳出多层循环,vector at】
  19. telegram 新增 删除 联系人
  20. it-tidalwave-semantic-aux-1.0.5.jar下载

热门文章

  1. 视频教程-ArcGIS开发arcpy教程-其他
  2. Python爬虫最细致的讲解,Python爬虫之Python,爬虫入门
  3. amd k14主板参数_R5 1400配什么主板好?R5-1400主板搭配与参数详解 (全文)
  4. 使用VGG16网络结构训练自己的图像分类模型
  5. java random 种子数_JAVA:Random的种子含义
  6. 张一鸣在字节跳动7周年庆典上的演讲
  7. 【Linux】Linux基础常用命令1(常用Linux命令的基本使用,Linux终端命令格式)
  8. 视频教程-2020软考数据库系统工程师-基础知识培训视频-软考
  9. 《游戏脚本高级编程》
  10. 中文版Latex常用语法大全教程