sqlserver触发器详解(触发器增删改查)
触发器是⼀种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进⾏触发被⾃动调⽤执⾏的。⽽存储过程可以通过存储过程的名称被调⽤。
什么是触发器
触发器对表进⾏插⼊、更新、删除的时候会⾃动执⾏的特殊存储过程。触发器⼀般⽤在check约束更加复杂的约束上⾯。触发器和普通的存储过程的区别是:触发器是当对某⼀个表进⾏操作。诸如:update、insert、delete这些操作的时候,系统会⾃动调⽤执⾏该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语⾔语句⽽激发,这些语句有create、alter、drop语句。
DML触发器分为:
1、 after触发器(之后触发)
1. insert触发器
2. update触发器
3. delete触发器
2、 instead of 触发器 (之前触发)
其中after触发器要求只有执⾏某⼀操作insert、update、delete之后触发器才被触发,且只能定义在表上。⽽instead of触发器表⽰并不执⾏其定义的操作(insert、update、delete)⽽仅是执⾏触发器本⾝。既可以在表上定义instead of触发器,也可以在视图上定义。
触发器有两个特殊的表:插⼊表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。有系统在内存中创建者两张表,不会存储在数据库中。⽽且两张表的都是只读的,只能读取数据⽽不能修改数据。这两张表的结果总是与被改触发器应⽤的表的结构相同。当触发器完成⼯作后,这两张表就会被删除。Inserted表的数据是插⼊或是修改后的数据,⽽deleted表的数据是更新前的或是删除的数据 。
对表的操作Inserted逻辑表Deleted逻辑表增加记录(insert)存放增加的记录⽆
删除记录(delete)⽆存放被删除的记录
修改记录(update)存放更新后的记录存放更新前的记录
Update数据的时候就是先删除表记录,然后增加⼀条记录。这样在inserted和deleted表就都有update后的数据记录了。注意的是:触发器本⾝就是⼀个事务,所以在触发器⾥⾯可以对修改数据进⾏⼀些特殊的检查。如果不满⾜可以利⽤事务回滚,撤销操作。
创建update触发器
--判断该触发器是否存在,存在就删除
if ((object_id('tgr_valid_data', 'TR') is not null))
drop trigger tgr_valid_data
go
--创建语法
create trigger 触发器名称
on ‘关联的表名称’
for UPDATE  --修改后触发
as
--定义变量
declare @csocode varchar(30);
select @csocode=cSOCode  from inserted
if (@csocode is null)--判断是否更新了这个值
begin
raisError('订单不存在', 16, 1);--弹框
rollback tran;
end
go
创建delete类型触发器( delete触发器会在删除数据的时候,将刚才删除的数据保存在deleted表中。)
if (object_id('tgr_classes_delete', 'TR') is not null)
drop trigger tgr_classes_delete
go
create trigger tgr_classes_delete
on classes
for delete --删除触发
as
print '备份数据中……';
if (object_id('classesBackup', 'U') is not null)
--存在classesBackup,直接插⼊数据
insert into classesBackup select name, createDate from deleted;
else
--不存在classesBackup创建再插⼊
select * into classesBackup from deleted;
print '备份数据成功!';
go
修改触发器
alter trigger tgr_message
on student
after delete
as raisError('tgr_message触发器被触发', 16, 10);
go
-
-test
delete from student where name = 'lucy';
启⽤、禁⽤触发器
--禁⽤触发器
disable trigger tgr_message on student;
--启⽤触发器
enable trigger tgr_message on student;
查询创建的触发器信息
1. 查询已存在的触发器
select * iggers;
select * from sys.objects where type = ‘TR’;
2. 查看触发器触发事件
select te.* igger_events te iggers t
on t.object_id = te.object_id
where t.parent_class = 0 and t.name = ‘tgr_valid_data’;sqlserver备份表语句
3. 查看创建触发器语句
exec sp_helptext ‘tgr_message’;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。