系状态"置疑"列笔记——触发器2

一、创建一个简单的触发器

触发器是一种特殊的存储过程,类似于事件函数,SQL Server允许为插入、更新、删除创建触发器,即当在表中插入,更新,删除记录时,触发一个或一系列t - SQL语句。

触发器可以在查询分析器里创建,也可以在表名上点右键→”所有任务”→“管理触发器”来创建,不过都是要写t - SQL语句的,只是在查询分析器里要先确定当前操作的数据库。

创建触发器用创建触发


创建触发器触发器名称

表名

的插入、更新或删除

,,t - sql语句

注意:触发器名称是不加引号的。


如下是联机丛书上的一个示例,当在标题表上更改记录时,发送邮件通知MaryM。

创建触发提醒对标题

插入、更新、DELETE 

,,执行主. .xp_sendmail MaryM,,

,,,“不要忘记打印一份报告的分销商。'

二、删除触发器

用查询分析器删除

在查询分析器中使用下降引发触发器名称来删除触发器。

也可以同时删除多个触发器:下降引发触发器名称,触发器名称…

注意:触发器名称是不加引号的。在删除触发器之前可以先看一下触发器是否存在:

如果存在(选择名称从sysobjects名称=触发器名称和xtype=TR)

用企业管理器删除

在企业管理器中,在表上点右键→”所有任务”→“管理触发器”,选中所要删除的触发器,然后点击“删除”。

三,重命名触发器

用查询分析器重命名

exec sp_rename原名称,新名称

sp_rename是SQL Server自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名,列表,索引名等。

用企业管理器重命名

在表上点右键→”所有任务”→“管理触发器”,选中所要重命名的触发器,修改触发器语句中的触发器名称,点击”确定”。

四,更多....

执行触发器语句,但不执行触发触发器的SQL语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行删除语句。例:

创建触发器f

而不是删除

,,插入日志……

如果更新(列名)

检查是否更新了某一列,用于插入或更新不能用于删除。例:

创建触发器f

台为更新

,,如果更新(状态)或更新(标题)

,,,,sql_statement——更新了状态或标题列

插入、删除

这是两个虚拟表,插入保存的是插入或更新之后所影响的记录形成的表,删除保存的是删除或更新之前所影响的记录形成的表。例:

创建触发器tbl_delete

台为删除

,,声明@title varchar (200)

,,从删除选择@title=标题

,,插入日志(logContent)值(“删除了标题为:“+标题+”的记录的)

说明:如果向插入或删除虚拟表中取字段类型为文本,p_w_picpath的字段值时,所取得的值将会是null。

五、查看数据库中所有的触发器

在查询分析器中运行:

使用数据库名

select *去从sysobjects xtype=癟R”

sysobjects保存着数据库的对象,其中xtype为TR的记录即为触发器对象。在一列,我们可以看到触发器名称。

六,sp_helptext查看触发器内容

用查询分析器查看

使用数据库名

exec sp_helptext去“触发器名称”

将会以表的样式显示触发器内容只

除了触发器外,sp_helptext还可以显示规则,默认值,未加密的存储过程,用户定义函数,视图的文本

用企业管理器查看

在表上点右键→”所有任务”→“管理触发器”,选择所要查看的触发器存储过程

七,sp_helptrigger用于查看触发器的属性

sp_helptrigger有两个参数:第一个参数为表名;第二个为触发器类型,为char(6)类型,可以是插入、更新、删除,如果省略则显示指定表中所有类型触发器的属性。

例:

使用数据库名

exec sp_helptrigger走台

,

八,递归,嵌套触发器

递归分两种,间接递归和直接递归我。们举例解释如下,假如有表1,表2名称分别为T1, T2,在T1, T2上分别有触发器G1, G2。

间接递归:对T1操作从而触发G1, G1对T2操作从而触发G2, G2对T1操作从而再次触发G1……

直接递归:对T1操作从而触发G1, G1对T1操作从而再次触发G1……

嵌套触发器

类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以T1, T2→T3……这样一直触发下去,最多允许嵌套32层。

系状态"置疑"列笔记——触发器2