目录

  • 第1单元    数据库系统导论
    • ● 任务1.1  数据库基本概念
    • ● 任务1.2  设计E—R 图
    • ● 任务1.3   将E-R图转换成关系模型
    • ● 任务1.4   练习与作业
    • ● 教与学参考资源
  • 第2单元   认识SQL SERVER数据库
    • ● 任务2.1 数据库应用场景
    • ● 任务2.3  SQL  Server 数据库安装
    • ● 任务2.4 SQL Server 的管理
    • ● 任务2.5  使用SSMS连接数据库
    • ● 教与学参考资源
  • 第3单元  创建和管理数据库
    • ● 任务3.1 创建数据库
    • ● 任务3.1(2)  命令创建数据库
    • ● 任务3.2 管理数据库
    • ● 任务3.2(2) 查看、收缩数据库
    • ● 教与学参考资源
  • 第4单元 创建和管理数据库表
    • ● 任务4.1 SQL Server常用数据类型
    • ● 任务4.2  创建数据表
    • ● 任务4.3  命令创建表
    • ● 任务4.4 实施完整性约束
    • ● 教与学参考资源
  • 第 5 单元   查询数据表
    • ● 任务5.1 单表数据查询
    • ● 任务5.2 多表数据查询
    • ● 任务5.3 嵌套查询
    • ● 任务5.4 合并查询结果
    • ● 教与学参考资源
  • 第6单元  管理表中数据
    • ● 任务6.1   添加数据
    • ● 任务6.2  修改数据
    • ● 任务6.3  删除数据
    • ● 习题与训练
    • ● 教与学参考资源
  • 第7单元  使用索引和视图
    • ● 任务7.1  使用索引
    • ● 使用T-SQL创建索引
    • ● 任务7.2  使用视图
    • ● 使用T-SQL语句创建视图
    • ● 教与学参考资源
  • 第8单元 Transact-SQL语言编程
    • ● 任务8.1   声明和使用变量
    • ● 任务8.2   流控语句
    • ● 任务8.3   常用系统函数
    • ● 任务8.4   创建自定义函数
    • ● 教与学参考资源
  • 第9单元  事务和锁
    • ● 任务   9.1     事务
    • ● 事务的基本操作
    • ● 任务9.2    锁
    • ● 死锁及避免方法(例)
    • ● 教与学参考资源
  • 第10单元  创建和管理存储过程
    • ● 任务10.1 存储过程及优点
    • ● 任务10.2 创建和执行存储过程
    • ● 任务10.3   存储过程参数和返回值
    • ● 任务10.4 修改、删除、 重新编译存储过程
    • ● 教与学参考资源
  • 第11单元 创建和管理触发器
    • ● 任务1 触发器的作用和分类
    • ● 任务2 触 发器的创建与执行
    • ● 任务3 创建级联触发器
    • ● 任务4 修改、删除触发器
  • 第12单元 创建和使用游标
    • ● 任务1  游标的作用及使用步骤
    • ● 任务2  创建基本游标
    • ● 任务3  使用变量保存游标数据
    • ● 任务4  使用循环环提取游标数据
  • 第13单元 SQL Server用户管理
    • ● 任务1数据库安全管理概述
    • ● 任务2SQL Server 安全机制
    • ● 任务3 账号、角色及权限管理
    • ● 任务4数据库完整性管理
    • ● 任务5 数据库的备份与还原
    • ● 任务6   数据的导入与导出
  • 第14单元  综合应用案例
    • ● 概述
    • ● 需求分析
    • ● 概述设计-逻辑设计- 物理设计
    • ● 编写数据库设计说明书
  • 学生做项目成果展示
    • ● 项目一  设计《我班同学数据库》
    • ● 项目二  设计《(Teaching)教学数据库》
    • ● 项目三  数据库应用系统设计开发项目
    • ● 项目四 《华夏-宿舍管理系统》设计开发
    • ● 项目五   综合实训大作业
    • ● 综合实训团队项目大作业
    • ● 学生完成项目摘录展示
  • 总复习与综合训练
    • ● 总复习
    • ● 综合训练一
    • ● 综合训练二
    • ● 综合训练三
    • ● 综合训练四
    • ● 综合训练五
    • ● 简答综合训练
  • 在线专题测验
    • ● 自检自测一
    • ● 自检自测二
  • 拓展   数据库管理工具平台  Navicat
    • ● 关于Navica
    • ● Navicat 的系统需求
    • ● Navicat 的用户界面
    • ● Navicat 创建数据库对象
    • ● 在Navicat创建的SQL 程序脚本
    • ● 在Navicat创建的SQL  server 脚本(2)
    • ● 综合实训(1)
    • ● 综合实训(2)
  • 技术拓展   (MYSQL)数据库技术与应用
    • ● MYSQL技术
  • 教与学图片剪影
    • ● 教学团队
    • ● 学生学习实训
    • ● 活动与交流
任务4 修改、删除触发器


任务4 
 触发器的修改

DML触发器和DDL触发器的创建都可以使用T-SQL语句ALTER TRIGGER来实现,下面分别予以介绍。


1. 修改DML触发器

语法格式如下:

  ALTER TRIGGER schema_name.trigger_name 

  ON ( table | view ) 

  [ WITH <dml_trigger_option> [ ,...n ] ]

  ( FOR | AFTER | INSTEAD OF ) 

{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } 

  [ NOT FOR REPLICATION ] 

  AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME <method specifier> [ ; ] } 


2. 修改DDL触发器

语法格式如下:

  ALTER TRIGGER trigger_name 

  ON { DATABASE | ALL SERVER } 

  [ WITH <ddl_trigger_option> [ ,...n ] ]

  { FOR | AFTER } { event_type [ ,...n ] | event_group } 

  AS { sql_statement [ ; ] | EXTERNAL NAME <method specifier> 

  [ ; ] }

  } 


【例】修改例14中所创建的触发器,将其所实现的功能修改为只提示不撤销。

本例代码如下:

  USE 学生成绩管理系统

  GO

    /*  CREATE TRIGGER PreventUpdate  */

  ALTER TRIGGER PreventUpdate

    ON 学生 AFTER UPDATE

  AS

  BEGIN

    IF UPDATE(学号)

    BEGIN

    PRINT ‘请注意,您当前修改的是学号字段!’

              /*   ROLLBACK TRANSACTION    */

      END

  END   

  

任务 触发器的删除

删除触发器可使用DROP TRIGGER语句来实现,其语法格式如下:

1. 删除DML触发器

  DROP TRIGGER [schema_name.]trigger_name [ ,...n ] [ ; ]

2. 删除DDL触发器

  DROP TRIGGER trigger_name [ ,...n ] ON { DATABASE | ALL SERVER}[ ; ]




【例】删除 例题中所创建的DML触发器PreventUpdate。

   本例代码如下:

  IF EXISTS(SELECT * FROM sysobjects WHERE name=‘PreventUpdate’)

   DROP TRIGGER PreventUpdate

【例】删除例题中所创建的DDL触发器PreventDropDatabase。

   本例代码如下:

  DROP TRIGGER PreventDropDatabase ON ALL SERVER


【例】删除例子中所创建的DML触发器PreventUpdate。

本例代码如下:

  IF EXISTS(SELECT * FROM sysobjects WHERE name=‘PreventUpdate’)

   DROP TRIGGER PreventUpdate

【例】删除例子中所创建的DDL触发器PreventDropDatabase。

本例代码如下:

  DROP TRIGGER PreventDropDatabase ON ALL SERVER


任务   关闭和启用触发器


当不再需要某个触发器时,可将其关闭,关闭触发器不会删除该触发器。该触发器仍然作为对象存在于当前数据库中。但是,当执行任意lNSERT、UPDATE或DELETE语句(在其上对触发器进行了编程)时,触发器将不会激发。已关闭的触发器可以被重新启用。启用触发器会以最初创建它时的方式将其激发。默认情况下,创建触发器后会自动启用触发器。

关闭触发器有两种方法:

     一种是通过SSMS,其步骤与使用SSMS修改触发器类似,只是在弹出的快捷菜单中选择“禁用”命令,如启用触发器,则选择“启用”命令。

    另一种方法是使用T-SQL的ALTER TABLE语句,其语法格式如下:

ALTER TABLE  数据表名

DISABLE  TRIGGER  触发器名

     ENABLE  TRIGGER  触发器名

Disable关键字是关闭触发器,Enable关键字是启用触发器,如要关闭或启用所有的触发器,使用参数ALL代替所有的触发器。


例: “禁用” [学生表]的触发器 [PreventDel]

ALTER TABLE  学生表

DISABLE TRIGGER  PreventDel


例: “启用” [学生表]的触发器 [PreventDel]

ALTER TABLE  学生表

ENABLE  TRIGGER  PreventDel


例: “禁用” [学生表]的所有触发器

ALTER TABLE  学生表

DISABLE TRIGGER  ALL


例: “启用” [学生表]的所有触发器 

ALTER TABLE  学生表

ENABLE  TRIGGER  ALL


任务  运用SSMS管理触发器

通过SQL Server 2008图形界面方式可以创建、查看、修改、删除触发器。

1. 创建触发器

  使用图形界面只能创建DML触发器,不能创建DDL触发器。

   (1)在【对象资源管理器】窗口中,依次展开【数据库】→【学生成绩管理系统】→【表】→【学生】节点。

   (2)在【触发器】节点上单击右键,选择【新建触发器】菜单项,打开【创建触发器】窗口,如图9.11所示。







(3)在上图所示的窗口中输入创建触发器的脚本,单击工具栏中的【执行】按钮,即可完成触发器的创建。


2. 查看触发器


  用户可在图形界面中查看触发器的相关信息,因DML触发器和DDL触发器所依赖的对象不同,查看步骤也不一样。


(1)查看DML触发器

   以触发器PreventDel为例,在图形界面中查看其相关信息的操作步骤如下:

在【对象资源管理器】窗口中,依次展开【数据库】→【学生成绩管理系统】→【表】→【学生】→【触发器】节点。选中触发器PreventDel,右键单击,在弹出的快捷菜单中选择【查看依赖关系】菜单项,打开【对象依赖关系】对话框,如图所示。



(2)查看DDL触发器

DDL触发器可分为数据库触发器、服务器触发器。查看数据库触发器:以学生成绩管理系统数据库为例,在【对象资源管理器】窗口中,依次展开【数据库】→【学生成绩管理系统】→【可编程性】→【数据库触发器】,即可看到当前数据库中的所有数据库触发器;查看服务器触发器:在【对象资源管理器】窗口中,依次展开【数据库】→【服务器对象】→【触发器】,即可查看到所有服务器触发器。


3. 修改触发器

使用图形界面只能修改DML触发器,不能修改DDL触发器。


4. 删除触发器


(1)删除DML触发器

    以触发器PreventDel为例,在【对象资源管理器】窗口中,依次展开【数据库】→【学生成绩管理系统】→【表】→【学生】→【触发器】节点,右键单击触发器PreventDel,在弹出的快捷菜单中选择【删除】菜单项,在弹出的【删除对象】窗口中单击【确定】按钮即可删除该触发器。

(2)删除DDL触发器

    删除DDL触发器的操作与删除DML触发器的操作类似,根据触发器所依赖的对象,找到需要删除的触发器,右键单击,在弹出的快捷菜单中选择【删除】菜单项即可。


要点小结:

触发器的作用及分类

创建AFTER类型和替代类型触发器

创建级联触发器

修改触发器

删除触发器


运用SSMS管理触发器


一、简答题

1、触发器的类型有哪些?

2、INSERTED表和DELETE表的作用各是什么?

二、上机实践题

1.在机上创建示例的触发器,并试用验证。

2.创建触发器TR_LEND1,当BookInfo(图书信息表)中该图书的在库数量(RemainNum)等于0时,则禁止向LendInfo(借阅表)中添加该图书的借阅信息。

3.创建触发器TR_LEND2,当LendInfo(借阅表)中有数据添加时,能自动更新StudentInfo(读者表)中该读者的借阅数量(LendBooks)及BookInfo(图书信息表)中该图书的在库数量(RemainNum)。