我们可以在单个表上创建任何类型的触发器。但问题是,如果我们在表上创建了“替代触发器”,除非它被禁用或删除,否则我们无法处理“后触发器”。在单一的范围内,我们无法处理这两种类型。谁能指导我解决这个问题?是否可以在单个表中使用两个触发器(After 和 ReplaceOf)?
最佳答案
您当然可以在同一个表上同时使用steadof和after触发器:
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
显然,您只能有一个而不是触发器,但可以有多个后触发器。
恐怕你的问题似乎有点不清楚 - 我不确定这个短语是什么:
if we have Instead Of Trigger created on a table until and unless it is disabled or deleted we cannot work on After Triggers
就是这个意思。
关于sql-server - 我们可以在单个表上使用 SQL 中的(之后)和(而不是)触发器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4612361/