如何在SQL Server中使用触发器
触发器是一种特殊的存储过程,在使用触发器之前可以与存储过程进行比较,触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用。
触发器主要优点如下:
触发器是自动的:当对表中的数据作了任何修改之后立即被激活,触发器与数据库中的表紧密相关,比如当对表执行INSERT、UPDATE或DELETE操作时,触发器就会自动执行。
触发器可以对数据库中的表进行嵌套的触发,一个触发器执行启动另一个触发器的操作,这样的嵌套可以达到32层。
触发器可以强制限制,可以防止恶意或错误的 INSERT、UPDATE 以及 DELETE 操作,并强制执行比CHECK约束定义的限制更为复杂的其他限制,虽CHECK约束已经在表定义的时候建立好了,但触发器可以实现很多其它的约束限制,在约束所支持的功能无法满足应用程序的功能要求时,触发器的优点就会体现。
在SQL Server中,已经包括两大类触发器:DML 触发器和 DDL 触发器。 DDL触发器为SQL Server 2005中新增的。
当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误,则整个事务即自动回滚。
DDL 触发器是一种特殊的触发器,它在响应数据定义语言 (DDL) 语句时触发。它们可以用于在数据库中执行管理任务,例如,审核以及规范数据库操作。像常规触发器一样,DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 UPDATE、INSERT 或 DELETE 语句而激发。相反,它们会为响应多种数据定义语言 (DDL) 语句而激发。这些语句主要是以 CREATE、ALTER 和 DROP 开头的语句。DDL 触发器可用于管理任务,例如审核和控制数据库操作。
了解到以上内容,我们就来看一下如何来创建一个DML触发器和一个DDL触发器。
在SQL Server 2000中我们创建触发器可以通过在表名上点右键->“所有任务”->“管理触发器”来创建,然后在里面写上对应的 T-SQL 语句,也可以在查询分析器里面创建。在SQL Server 2005中就不提供对应的表名进行操作了,需要直接通过写对应的T-SQL语句了。
触发器的操作命令主要有如下几种格式:
创建触发器:
Create Trigger 名称
On 表名
For 类型
As
Sql语句
修改触发器:
Alter Trigger 名称
删除触发器:
Drop Trigger 名称
先来看一个DML触发器:
现在有两张表,一张是学生的基本信息表,一张是他所借书的表(表里面和学生基本信息表关联的是学号),现在业务如下:更改了学生的学号,同时也要更改所借书表的学号;该学生毕业后,删除他的学号时,同时也删除它的借书的记录。
我们就来创建这样的触发器,先来描述更改学生的学号同时更改所借书的学号:
Create Trigger TrgStudentInfoUpdate
On StudentInfo --在StudentIno表中创建触发器
For Update --为更新事件触发
As
if Update(StudentNumber) --更新了学号后
Begin
Update BorrowBook --更新借书的记录表
Set StudentNumber=StudentInfo.StudentNumber
From BorrowBook , StudentInfo
Where BorrowBook.StudentNumber=StudentInfo.StudentNumber
End
然后再来看看删除学号时同时删除它的借书记录:
Create trigger TrgStudentInfoDelete
On StudentInfo --在StudentIno表中创建触发器
For Delete --为删除事件触发
As
Delete BorrowBook --删除学生信息时同时删除他的借书记录表信息
From BorrowBook, StudentInfo
Where BorrowBook.StudentNumber=StudentInfo.StudentNumber
以上就是DML的触发器,下面来看DDL的触发器,我们可以看SQL Server 2005自带的一个例子的用法:CREATE TRIGGER safety
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE –-在删除或对表进行更新时
AS
PRINT 'You must disable Trigger "safety" to drop or alter tables!' –-提示信息
ROLLBACK –-回滚
以上示例说明了如何使用 DDL 触发器来防止数据库中的任一表被修改或删除,当任何一张表在被修改或删除的时候,都会触发到相应的事件。
触发器在给我们带来操作方便的同时,也需要慎用它,如果过分的依赖触发器,很大程度上就会影响到数据库的结构,增加了维护的复杂度。
转载于:https://www.cnblogs.com/majunfeng/archive/2010/07/17/3933858.html
如何在SQL Server中使用触发器相关推荐
- 如何在SQL Server中实现错误处理
错误处理概述 (Error handling overview) Error handling in SQL Server gives us control over the Transact-SQL ...
- c# mysql 触发器 实时,C#-.Net SqlDataAdapter和SQL Server中的触发器
我在SQL Server中使用触发器,该触发器在SQL Server Management Studio的查询窗口中执行查询时按要求工作.触发器的目的是从一个表中获取最新值(其中一个ID对应于插入的I ...
- sql server 数组_如何在SQL Server中实现类似数组的功能
sql server 数组 介绍 (Introduction) I was training some Oracle DBAs in T-SQL and they asked me how to cr ...
- sql 会话_在特定会话中禁用SQL Server中的触发器
sql 会话 This article will focus on the various ways to disable triggers in SQL Server so they won't i ...
- 如何在SQL Server中比较表
介绍 (Introduction) If you've been developing in SQL Server for any length of time, you've no doubt hi ...
- 如果不使用 SQL Mail,如何在 SQL Server 中发送电子邮件
如果不使用 SQL Mail,如何在 SQL Server 中发送电子邮件 察看本文应用于的产品 文章编号 : 312839 最后修改 : 2006年12月21日 修订 : 10.1 本页 概要 SQ ...
- 如何在SQL Server中附加Pubs数据库
在本教程中,我将解释如何 在SQL Server中 附加Pubs数据库 . 每个其他数据库的过程都是相同的. 您需要将Pubs MDF和LDF文件附加到SQL Server. 请注意,Northwi ...
- 如何在SQL Server中使用级联删除?
本文翻译自:How do I use cascade delete with SQL Server? I have 2 tables: T1 and T2, they are existing tab ...
- 如何在SQL Server中创建SQL依赖关系图
Deleting or changing objects may affect other database objects like views or procedures that depends ...
最新文章
- torch中的copy()和clone()
- An attempt has been made to start a new process before the current process has finished its
- [C++ STL] map使用详解
- 【Python学习系列三】Windows下Python第三方常用库安装
- 关于Linux下kernel.shmmax的设置问题
- 成本直降50% | 阿里云发布云原生网关,开启下一代网关新进程
- BCVP开发者说第5期:QuartzCore.Blazor
- 用幼儿园所学拆解美国总统网络安全行政令(含软件供应链安全)
- android html模板下载地址,Android HTML模板
- 区块链教程Fabric1.0源代码分析putils(protos/utils工具包)
- 【复盘】目前实训三班级复盘遇到的问题
- C语言:输出大写的三角形字母表(进阶)
- (十)MySQL中的逻辑条件 优先规则 排序(未完版)
- 元宇宙会成为 IPv6 的拐点吗?
- 可视化降维方法 t-SNE
- iPad 3 即将发布,网传价格,IPD2降价50$ 新功能猜测
- 从小米上市了解CDR和“同股不同权”
- 【SQL】递归展BOM全阶,含半成品,用量累乘,如半成品用量2,下阶用量需要乘以2
- 哈夫曼树编码的实现+图解(含全部代码)
- 编程技术的“捷径”—Java持有数据(内有福利)
热门文章
- 常见OJ评判结果对照表
- Windows环境下配置环境变量
- php数组选择随机元素,php 数组随机选择一个元素显示的简单示例
- python采集文章_python学习基础之信息采集
- 把一个dataset的表放在另一个dataset里面_视频自监督一. STCR: 一个基于数据增强的简单有效正则项 (降低静态信息的影响)...
- nodejs http.get 方法可以 request 不行
- java数据库视图工具_数据库视图工具类
- 宁波网络推广浅析网站在优化关键词需注意哪些事项?
- 网络推广外包浅析为什么网络推广外包中网站优化比百度竞价更友好?
- 网络营销——网络营销专员如何将网站优化技能持久点亮