基本的语法我都不写了,需要的各位可以去查下SQL联机丛书
我只写简单的应用及经验
1、代码:写触发器之前一般要判断该触发器是否存在,如果存在则要删除该触发器,这样可以保证脚本多次运行的时候没有问题。
同样适用于存储过程,但是不能勇于数据表,特别是当数据表有数据的时候。(我们曾经遇到过,一个成员修改数据库的时候,
重新生成了脚本,结果就把数据全部删掉了)
一般用
IF EXISTS (SELECT name FROM sys.objects WHERE name = '触发器的名字' AND type = 'TR')
DROP TRIGGER ’触发器名字‘;
GO
2.创建:下边可以开始创建触发器
Create Trigger 触发器名字 On 表
FOR/INSTEAD OF/AFTER ---这里有三个选项:
-- for是针对什么的触发,也就是当执行某些操作的时候触发(insert,update,delete)
-- after是再操作之后触发,也就是当某些操作执行完的时候触发(insert,update,delete)
-- instead of 是替换这些操作(insert,update,delete)
Insert(, Update,delete)可以是一个或者多个的组合
AS
SQL语句
GO
3. 处理
如果是单独针对某个操作的触发器,则不用判断,否则就是要判断操作。
在触发器里边,会有两个临时表供使用inserted 和deleted
如果是insert 操作,则只会在inserted表里边有数据
如果是delete操作,则只会在deleted表里有数据
如果是update操作呢?这里要注意下,update操作的实质,也就是在SQL DBMS的内部,其实还是执行了
两个操作,delete 和insert。所以,如果是update 这两个临时表都会有数据,一个是旧的,一个是新的。
如果你明白了这些,就可以处理日常遇到的问题啦
我只写简单的应用及经验
1、代码:写触发器之前一般要判断该触发器是否存在,如果存在则要删除该触发器,这样可以保证脚本多次运行的时候没有问题。
同样适用于存储过程,但是不能勇于数据表,特别是当数据表有数据的时候。(我们曾经遇到过,一个成员修改数据库的时候,
重新生成了脚本,结果就把数据全部删掉了)
一般用
IF EXISTS (SELECT name FROM sys.objects WHERE name = '触发器的名字' AND type = 'TR')
DROP TRIGGER ’触发器名字‘;
GO
2.创建:下边可以开始创建触发器
Create Trigger 触发器名字 On 表
FOR/INSTEAD OF/AFTER ---这里有三个选项:
-- for是针对什么的触发,也就是当执行某些操作的时候触发(insert,update,delete)
-- after是再操作之后触发,也就是当某些操作执行完的时候触发(insert,update,delete)
-- instead of 是替换这些操作(insert,update,delete)
Insert(, Update,delete)可以是一个或者多个的组合
AS
SQL语句
GO
3. 处理
如果是单独针对某个操作的触发器,则不用判断,否则就是要判断操作。
在触发器里边,会有两个临时表供使用inserted 和deleted
如果是insert 操作,则只会在inserted表里边有数据
如果是delete操作,则只会在deleted表里有数据
如果是update操作呢?这里要注意下,update操作的实质,也就是在SQL DBMS的内部,其实还是执行了
两个操作,delete 和insert。所以,如果是update 这两个临时表都会有数据,一个是旧的,一个是新的。
如果你明白了这些,就可以处理日常遇到的问题啦