我是靠谱客的博主 妩媚宝贝,这篇文章主要介绍SQLServer触发器的创建和使用,现在分享给大家,希望可以做个参考。

触发器也是和之前写的数据库函数和存储过程类似,
可以看做是一种特殊的数据库函数,只不过由系统调用,我们也需要表明调用的实际和规则

触发器的主体(也可以说是触发器的使用范围)

  • 表table
  • 视图view
  • 库database
  • 服务器server
    按照SQLServer的分类----表/视图触发器称为DML触发器-------数据库/服务器触发器称为DDL触发器

触发器的触发规则(触发的可选条件)

1.对于主体在表和视图的触发器
Trigger on an INSERT, UPDATE, or DELETE statement to a table or view
可以在Insert,Update,delete时触发
不能在Select触发
2.对于主体在数据库和服务器的触发器
Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE, or UPDATE statement
可以在CREATE, ALTER, DROP, GRANT, DENY, REVOKE,UPDATE时触发

触发器的语法

表/视图触发器的语法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ALTER TRIGGER schema_name.trigger_name ON ( table | view ) [ WITH <dml_trigger_option> [ ,...n ] ] ( FOR | AFTER | INSTEAD OF ) --( FOR | AFTER | INSTEAD OF )代表触发器执行的时机 --FOR的默认既是AFTER表示在原命令执行后执行 --INSTEAD OF代表不执行原命令,直接去执行触发器内容 { [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE ] } --从机修改不执行触发该触发器 [ NOT FOR REPLICATION ] AS { sql_statement [ ; ] [ ...n ] | EXTERNAL NAME <method specifier> [ ; ] } <dml_trigger_option> ::= [ ENCRYPTION ] [ <EXECUTE AS Clause> ] <method_specifier> ::= assembly_name.class_name.method_name

示例:

测试表

复制代码
1
2
3
4
5
6
7
8
9
Create table t_student( Id int IDENTITY(1,1) PRIMARY key, Name varchar(20), Birth datetime, Address varchar(100) ) INSERT into t_student values('xiaoming','2022-07-07','GuangDong') INSERT into t_student values('xiaohuang','2022-07-06','FuJian')

AFTER触发器

复制代码
1
2
3
4
5
6
7
8
create trigger TestAfterTrigger ON t_student AFTER UPDATE AS BEGIN PRINT '修改了一条记录' END

请添加图片描述
更新语句正常执行
请添加图片描述
INSTEAD OF触发器

复制代码
1
2
3
4
5
6
7
8
Create Trigger TestTriggerSec On t_student INSTEAD OF DELETE AS BEGIN PRINT '你根本删除不了' END

请添加图片描述
再去查询原表
请添加图片描述
指定的记录并没有被删除,即原命令并没有执行
这就是INSTAD OF和AFTER的区别

数据库/服务器触发器的语法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ALTER TRIGGER trigger_name ON { DATABASE | ALL SERVER } [ WITH <ddl_trigger_option> [ ,...n ] ] { FOR | AFTER } { event_type [ ,...n ] | event_group } AS { sql_statement [ ; ] | EXTERNAL NAME <method specifier> [ ; ] } } <ddl_trigger_option> ::= [ ENCRYPTION ] [ <EXECUTE AS Clause> ] <method_specifier> ::= assembly_name.class_name.method_name

数据库/服务器触发器(DDL触发器)的语法和表/视图触发器几乎一样,
不同在于不能使用INSTAED OF,和触发的规则不一样
示例:

复制代码
1
2
3
4
5
6
Create Trigger DBTrigger On DATABASE FOR CREATE_TABLE AS PRINT '你创建了一张表'

请添加图片描述

最后

以上就是妩媚宝贝最近收集整理的关于SQLServer触发器的创建和使用的全部内容,更多相关SQLServer触发器内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部