目录
-
什么是触发器(trigger)?
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 的表格或者视图上。它不是通过手工进行启动的,也不是通过程序调用,而是通过对表格信息的处理(如insert,update,delete)来触发才会执行的。触发器它可以查询其它表,可以包含SQL语句。 -
触发器的种类?
有INSTEAD-OF和AFTER两种触发器。
INSTEAD OF触发器可以实现更新视图时多个数据表一起更新的问题。
INSTEAD OF触发器并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。既可以在表上定义instead of触发器,也可以在视图上定义。
AFTER触发器要求只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上。 -
触发器的作用?
触发器可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
4.INSTEAD-OF触发器的语法
--创建.INSTEAD-OF触发器--
go
create trigger tgr_insteadof
on Table_A
instead of update --设置Instead_of触发器在进行执行update操作时触发也可设置为insert,delete--
as
--定义变量
declare @oldtypeID int
declare @newtypeID int
--从两张表或获取数据
select @oldtypeID=TypeID from deleted --oldtypeID为更新前的旧数据--
select @newtypeID=TypeID from inserted --newtypeID为更新后的新数据--
--执行操作
update bookType set Nums = Nums-1 where ID=@oldtypeID --书籍种类数量-1--
update bookType set Nums = Nums+1 where ID=@newtypeID --书籍种类数量+1--
5.After 触发器的语法
--创建After触发器--
go
create trigger tgr_name --触发器名称--
on Table_A
for insert --设置触发器为insert,也可以设置为delete,update--
as
declare @typeID int --定义变量
select @typeID=TypeID from inserted --从插入表获取数据
update bookType set Nums = Nums+1 where ID=@typeID --更新bookType表