sql-server - 我们可以在单个表上使用 SQL 中的(之后)和(而不是)触发器吗?

标签 sql-server

我们可以在单个表上创建任何类型的触发器。但问题是,如果我们在表上创建了“替代触发器”,除非它被禁用或删除,否则我们无法处理“后触发器”。在单一的范围内,我们无法处理这两种类型。谁能指导我解决这个问题?是否可以在单个表中使用两个触发器(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/

相关文章:

sql - "No column information was returned"从空 Excel 工作表中选择时出错

sql-server - 如何在 SQL Server 2008 Express 中安装企业管理器?

sql-server - 准确测量存储过程的性能

sql-server - 如何向应用程序角色授予 db_owner 权限?

sql-server - 如何更新表结构并保留当前数据

sql - 如何通过 Row_Number 更新列,并为每一行使用不同的值?

sql-server - T-SQL 触发器、非确定性错误、SQL Server

sql - 删除 FOR XML 中的行元素

SQL查询获取列的精度值

sql - 使用序列更新现有记录的最快方法是什么?