2011-01-06 64 views
1

我们可以在单个表上创建任何类型的触发器。但事情是,如果我们在表上创建了替代触发器,并且除非它被禁用或删除,否则我们无法在After Triggers上工作。在单个strech中,我们无法在这两种类型上工作。任何人都可以指导我吗?是否可以在单个表中使用两个触发器(After和ReplaceOf)?我们可以在单个表上的SQL中使用(After)和(insteadOf)触发器吗?

+2

如果你在同一张桌子上有'替代插入'和'插入后'的触发器,而你''而不是'触发器不会插入任何东西到那张表中,那么''之后'触发器将永远不会触发。这是你的情况吗? – 2011-01-06 07:39:42

回答

2

你当然可以有,并在同一个表触发器后两者,而不是:

create table dbo.T1 (
ID int not null, 
Val1 varchar(10) not null 
) 
create table dbo.T1_History (
ID int not null, 
Val1 varchar(10) not null, 
HappenedAt datetime not null 
) 
go 
create trigger T_T1_I 
on dbo.T1 
instead of insert 
as 
insert into dbo.T1 (ID,Val1) 
select ID+10,Val1 from inserted 
go 
create trigger T_T1_I_History 
on dbo.T1 
after insert 
as 
insert into dbo.T1_History (ID,Val1,HappenedAt) 
select ID,Val1,CURRENT_TIMESTAMP from inserted 
go 
insert into dbo.T1 (ID,Val1) 
select 1,'abc' 
go 
select * from dbo.T1 
select * from dbo.T1_History 

显然,你只能有一个单一的INSTEAD OF触发器,但你可以触发后有多个。

恐怕你的问题似乎有点不清楚 - 我不知道那句话:

如果我们有INSTEAD OF触发器表中创建之前,除非它被禁用或删除我们在触发后无法工作

的意思是说。

相关问题