1
我们可以在单个表上创建任何类型的触发器。但事情是,如果我们在表上创建了替代触发器,并且除非它被禁用或删除,否则我们无法在After Triggers上工作。在单个strech中,我们无法在这两种类型上工作。任何人都可以指导我吗?是否可以在单个表中使用两个触发器(After和ReplaceOf)?我们可以在单个表上的SQL中使用(After)和(insteadOf)触发器吗?
我们可以在单个表上创建任何类型的触发器。但事情是,如果我们在表上创建了替代触发器,并且除非它被禁用或删除,否则我们无法在After Triggers上工作。在单个strech中,我们无法在这两种类型上工作。任何人都可以指导我吗?是否可以在单个表中使用两个触发器(After和ReplaceOf)?我们可以在单个表上的SQL中使用(After)和(insteadOf)触发器吗?
你当然可以有,并在同一个表触发器后两者,而不是:
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触发器表中创建之前,除非它被禁用或删除我们在触发后无法工作
的意思是说。
如果你在同一张桌子上有'替代插入'和'插入后'的触发器,而你''而不是'触发器不会插入任何东西到那张表中,那么''之后'触发器将永远不会触发。这是你的情况吗? – 2011-01-06 07:39:42