触发器(Trigger)(六)

转载 2007年09月20日 09:02:00

触发器的嵌套

当一个触发器执行时,能够触活另一个触发器,这种情况就是触发器的嵌套。在SQL Server 2005里,触发器能够嵌套到32层。

如果不想对触发器进行嵌套的话,可以通过【允许触发器激活其他触发器】的服务器配置选项来控制。但不管此设置是什么,都可以嵌套Instead Of触发器。设置触发器嵌套的选项更改方法为:

1)打开Management Studio,在【对象资源管理】中,右击服务器名,并选择【属性】选项。

2)单击【高级】节点。

3)在【杂项】里设置【允许触发器激活其他触发器】为TrueFalse。如图10所示:

10 开启/关闭触发器嵌套

现在,在Northwind数据库里建一个操作记录表,用来记录所有数据表的操作,无论是对哪个数据表进行了插入、更新或删除,都可以把操作内容和操作时间记录到操作记录表里。下面是建立操作记录表的SQL语句:

CREATE TABLE 操作记录表(

         编号 int IDENTITY(1,1) NOT NULL,

         操作表名 varchar(50) NOT NULL,

         操作语句 varchar(2000) NOT NULL,

         操作内容 varchar(2000) NOT NULL,

         操作时间 datetime NOT NULL

         CONSTRAINT DF_操作记录表_操作时间 DEFAULT (getdate()),

 CONSTRAINT PK_操作记录表 PRIMARY KEY CLUSTERED

(

         编号 ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

为了简便起见,在操作记录表里,只建一个After Insert触发器,触发器的作用是输入一条语句:数据库又有记录变动了。在实际应用时,读者可自行修改成所需的代码。

CREATE TRIGGER 操作记录表_Insert

   ON  操作记录表

   AFTER INSERT

AS

BEGIN

         print '数据库又有记录变动了'

END

GO

作为示例,只在类别表里建立一个After Insert触发器,当在类别表里插入一条记录的时候,该触发器向操作记录表里插入一条记录,而在操作记录表里插入记录时,将会触发操作记录表里的【操作记录表_Insert】触发器。

CREATE TRIGGER 类别_Insert

   ON  类别

   AFTER INSERT

AS

BEGIN

         Declare

         @类别名称 nvarchar(15),

     @说明 nvarchar(max)

         set @类别名称= (Select 类别名称 from inserted)

         set @说明= (Select 说明 from inserted)

         INSERT INTO 操作记录表(操作表名,操作语句,操作内容)

     VALUES ('类别表','插入记录','类别名称:'+@类别名称+',说明:'+@说明)

END

GO

现在运行一下对类别表的插入语句

INSERT INTO 类别(类别名称,说明)

VALUES ('书籍','各类图书')

运行结果如图11所示:

11 触发器嵌套被激活

在【消息】对话框可以看到数据库又有记录变动了,这说明,触发器已经被嵌套激活了。如果把【允许触发器激活其他触发器】的选项设为False,再看看运行结果:

12 触发器嵌套没有被激活

如图2所示,现在没有数据库又有记录变动了的提示输出,说明嵌套的触发器没有被激活。

 触发器的嵌套

当一个触发器执行时,能够触活另一个触发器,这种情况就是触发器的嵌套。在SQL Server 2005里,触发器能够嵌套到32层。

如果不想对触发器进行嵌套的话,可以通过【允许触发器激活其他触发器】的服务器配置选项来控制。但不管此设置是什么,都可以嵌套Instead Of触发器。设置触发器嵌套的选项更改方法为:

1)打开Management Studio,在【对象资源管理】中,右击服务器名,并选择【属性】选项。

2)单击【高级】节点。

3)在【杂项】里设置【允许触发器激活其他触发器】为TrueFalse。如图10所示:

10 开启/关闭触发器嵌套

现在,在Northwind数据库里建一个操作记录表,用来记录所有数据表的操作,无论是对哪个数据表进行了插入、更新或删除,都可以把操作内容和操作时间记录到操作记录表里。下面是建立操作记录表的SQL语句:

CREATE TABLE 操作记录表(

         编号 int IDENTITY(1,1) NOT NULL,

         操作表名 varchar(50) NOT NULL,

         操作语句 varchar(2000) NOT NULL,

         操作内容 varchar(2000) NOT NULL,

         操作时间 datetime NOT NULL

         CONSTRAINT DF_操作记录表_操作时间 DEFAULT (getdate()),

 CONSTRAINT PK_操作记录表 PRIMARY KEY CLUSTERED

(

         编号 ASC

)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY]

GO

为了简便起见,在操作记录表里,只建一个After Insert触发器,触发器的作用是输入一条语句:数据库又有记录变动了。在实际应用时,读者可自行修改成所需的代码。

CREATE TRIGGER 操作记录表_Insert

   ON  操作记录表

   AFTER INSERT

AS

BEGIN

         print '数据库又有记录变动了'

END

GO

作为示例,只在类别表里建立一个After Insert触发器,当在类别表里插入一条记录的时候,该触发器向操作记录表里插入一条记录,而在操作记录表里插入记录时,将会触发操作记录表里的【操作记录表_Insert】触发器。

CREATE TRIGGER 类别_Insert

   ON  类别

   AFTER INSERT

AS

BEGIN

         Declare

         @类别名称 nvarchar(15),

     @说明 nvarchar(max)

         set @类别名称= (Select 类别名称 from inserted)

         set @说明= (Select 说明 from inserted)

         INSERT INTO 操作记录表(操作表名,操作语句,操作内容)

     VALUES ('类别表','插入记录','类别名称:'+@类别名称+',说明:'+@说明)

END

GO

现在运行一下对类别表的插入语句

INSERT INTO 类别(类别名称,说明)

VALUES ('书籍','各类图书')

运行结果如图11.11所示:

11 触发器嵌套被激活

在【消息】对话框可以看到数据库又有记录变动了,这说明,触发器已经被嵌套激活了。如果把【允许触发器激活其他触发器】的选项设为False,再看看运行结果:

12 触发器嵌套没有被激活

如图12所示,现在没有数据库又有记录变动了的提示输出,说明嵌套的触发器没有被激活。

 

相关文章推荐

触发器,trigger

  • 2012-11-11 15:08
  • 479KB
  • 下载

unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新

做实验的时候发现了一个很诡异的事情,就是发生碰撞的主体一定是要带刚体的,即只有带刚体的碰撞体去撞其他碰撞体时,双方才会收到碰撞事件,以下是我做的实验: 一、控制A(刚体加碰撞体)撞击 静止的B(碰撞...
  • ybhjx
  • ybhjx
  • 2015-12-23 20:12
  • 663

深入浅出触发器(Trigger)

  • 2010-01-05 20:57
  • 2.12MB
  • 下载

触发器Trigger介绍

触发器简介         触发器是数据库的一种,编码方式类似于存储过程,当有DML语句对表进行操作的时候,可以引起触发器的执行,从而实现对表的数据一致性维护;         通过触发器...

cocos2d-x CocoStudio中场景触发器(Trigger)的使用和扩展

场景编辑器中的触发器是一种通过事件触发机制,在特定的事件被触发的时候自动执行自己预先定义的动作或者功能。 编辑器中带有一些默认的事件、条件和动作,当然也可以扩展自定义的事件、条件和动作。 ...

(05) 触发器(Trigger)的维护困境

触发器(trigger)在维护中的斑斑劣迹,我碰到的那是数不胜数.         首先不是说trigger不好,数据库都提供这个技术,自然有它的好处.  其中之一, 处理某些业务时特别简便.    ...

mysql触发器(Trigger)简明总结和使用实例

一,什么触发器 1,个人理解 触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了。你放炮仗,点燃了,一会就炸了。 2,官方定义 ...

Oracle Trigger 触发器

Oracle Trigger 在Oracle8i之前,只允许给予表或者视图的的DML的操作,而从Oracle8i开始,不仅可以支持DML触发器,也允许给予系统事件和DDL的操作. 一、触发器的分类...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)