欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » SQLServer教程 » 正文

热门阅读

DML触发器与DDL触发器详解

创建时间:2011年08月24日 23:36  阅读次数:(13169)
分享到:
先了解一下触发器:
触发器其实就是一个特殊的存储过程,因为它和存储过程有一样的特征,都是预用写好的Sql命令存储在SqlServer服务器中。触发器在指定的表中的数据发生变化的时候会自动执
行。它与存储过程的区别也在此,因为存储过程是需要我们用命令去调用的。

在Sql Server2005之前,是没有DDL触发器的,我们要知道,DDL触发器是Sql Server2005新增的触发器。

DML触发器:
当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于强制执行业
务规则,以及扩展Sql Server约束,默认值等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
一个简单的例子,我们想要在送货后减少库存的数量,那我们就可以在送货单的表上写update触发器,用来减少库存的数量。

DDL触发器:
它是Sql Server2005新增的触发器,主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它在数据库结构发生变化时
执行,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。


DML触发器详细说明:
前面有说了DML触发器与DML触发器的定义及一些基本作用。现在我们来详细了解一下我们用的最多的DML触发器。

DML触发器在执行顺序上我们又可以将它分为两类,一是在insert,update,delete语句执行后触发的触发器,也就是after触发器,该类触发器是我们用的最多的。可能我们在网上一些示例中看到有用for定义的触发器,基实用after定义与for定义都一样,只是for是Sql Server早期版本唯一可使用的选项,编辑现在已经不用了。

注意:after触发器只能在表上指定,且在该类触发器中不允许使用text,ntext,image列。

简单示例:
create trigger ti_tb1 after insert
as
if @@rowcount=0 return;
set nocount on
--具体触发器内容
set nocounf off


第二类是在insert,update,delete语句执行前触发的触发器,也就是instead of触发器,这类触发器可能定义在一个或多个基表上的视图上。

注意:同一表同一个执行类型,只能创建一个instead of触发器,也就是说一个表只能一个插入前触发器,一个修改前触发器,一个删除前触发器,而after则不限制数量,在该触发器中可以使用text,ntext,image列。

特别重要:在instead of触发器中会中断insert,update,delete操作。也就是说,如果你想要在某表执行完instead of insert触发器后继续执行插入动作,你必须在instead of insert触发器中再写一次插入语句.

简单示例:
create trigger ti_tb1 instead of insert
as
if @@rowcount=0 return;
set nocount on
--具体触发器内容
--该触发器会中断insert命令,如果你想在执行完该触发器后继续执行插入命令,你必须再写一次插入语句,如
--insert tb1(col1,col2) 
--select col1,col2 from inserted

set nocounf off


以上代码为编辑在记事本中写的,未在查询分析器中验证,可能会存在关键字写错的情况,请读者自己调整。
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 64+14=? 的结果(结果是:78)
结  果: