SQL触发器之常用语句(总结)


当前第2页 返回上一页

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

例:

1

2

3

use 数据库名

go

exec sp_helptrigger tbl

八、递归、嵌套触发器

递归分两种,间接递归和直接递归。我们举例解释如下,假如有表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 层。

设置直接递归

默认情况下是禁止直接递归的,要设置为允许有两种方法:

T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true

EM:数据库上点右键->属性->选项。

设置间接递归、嵌套

默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:

T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许

EM:注册上点右键->属性->服务器设置。

九、触发器回滚

我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。

1

2

3

4

5

6

7

8

use 数据库名

go

create trigger tr

on 表名

for update

as

    if update(userName)

        rollback tran

关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。

十、禁用、启用触发器

禁用:alter table 表名 disable trigger 触发器名称

启用:alter table 表名 enable trigger 触发器名称

如果有多个触发器,则各个触发器名称之间用英文逗号隔开。

如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。

十一、判断插入修改删除

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

create TRIGGER [updatetest] ON [dbo].[TEST]

FOR INSERT, UPDATE, DELETE

AS

begin

    DECLARE

    @IsInsert bit,

    @IsUpdate bit,

    @IsDelete bit

    IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)

        SET @IsInsert = 1

    ELSE

        SET @IsInsert = 0

      

    IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)

        SET @IsUpdate = 1

    ELSE

        SET @IsUpdate = 0

      

    IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)

        SET @IsDelete = 1

    ELSE

        SET @IsDelete = 0

      

    if (@IsUpdate=1)

       PRINT 'updated '

     if (@IsInsert=1)

       PRINT 'insert '

     if (@IsDelete=1)

       PRINT 'delete 'end

推荐学习:MySQL教程

以上就是SQL触发器之常用语句(总结)的详细内容,更多请关注木庄网络博客其它文章!

返回前面的内容

相关阅读 >>

asp中 sql语句 使用方法第33页

简述mysql explain 命令

对mysql经常使用语句的全面总结(必看篇)

sql查询中group by的含义是什么

sql更新记录的命令

利用navicat工具快速生成sql语句

条件数据库androidsqllite的简单使用

sql语言通常称为

在postgresql中通过命令行执行sql文件

删除testdb数据库的sql命令是什么

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

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

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

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...