SQL Server 触发器总结

触发器(trigger)

是一种特殊的存储过程,可以用来对表实施复杂的完整性约束,保持数据的一致性。当触发器所保护的数据发生改变时,触发器会自动被激活,并执行触发器中所定义的相关操作,从而保证对数据的不完整性约束或不正确的修改。

SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。

这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。

 

Instead of 和 After触发器

(1)AFTER触发器它是在执行INSERT、UPDATE、DELETE语句操作之后执行触发器操作。它主要是用于记录变更后的处理或检查,一旦发生错误,可以用Rollback Transaction语句来回滚本次扣件,不过不能对视图定义AFTER触发器。

 

(2)INSTEAD OF触发器它在执行INSERT、UPDATE、DELETE语句操作之前执行触发器本身所定义的操作。而INSTEAD OF触发器是可以定义在视图上的。

下面用一个我学习的例子:

use TestA
/*
*在数据库TestA中向dbo.Tb_User插入数据时候同时向数据库TestB中的表dbo.Tb_BUser插入数据
*/
if (object_id('insertbuserbyuser', 'TR') is not null)    
drop trigger insertbuserbyuser
go
create  trigger insertbuserbyuser
on dbo.Tb_User
for insert 
as
begin
insert into [TestB].[dbo].[Tb_BUser] select tuname,
tupwd,trealname,tsex from inserted  
end
go


/*
*修改数据库TestA中dbo.Tb_User的数据时候同时修改数据库TestB中的表dbo.Tb_BUser数据
*/
if (object_id('updatebuserbyuser', 'TR') is not null)    
drop trigger updatebuserbyuser
go
create  trigger updatebuserbyuser
on dbo.Tb_User
for update
as
begin
declare @otuid int
SELECT  @otuid=[tuid]FROM deleted
update[TestB].[dbo].[Tb_BUser] set tuname=a.tuname,
tupwd=a.tupwd,trealname=a.trealname,tsex=a.tsex from inserted a
where [TestB].[dbo].[Tb_BUser].tuid=@otuid 
end
go

 

 

数据库图:

 

 

posted @ 2014-02-28 10:46  Cynosure鱼  阅读(448)  评论(0编辑  收藏  举报