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

 

 

数据库图:

 

 

转载于:https://www.cnblogs.com/Cynosure/p/3573089.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值