使用SQL Server和触发器,只是经历了一些非常奇怪的事情(对我来说)。详情如下 - 不确定哪些是相关的,所以我只是列出(如果我错过了什么,请问):
INSTEAD OF INSERT
好的,所以这里是:似乎触发NEVER被调用,直到我 ALTERED 它(并开始导致问题所有这些都是“预期的行为”,因为我现在可以看到发生了什么)。
我无法找到任何说明 ALTERING 触发器将“启用它”的资源 - 假设它已被禁用 - 这是我能理解它的唯一方法所有...
所以似乎有一些与触发器有关的数据库副本(ing)?为什么(或者更确切地说)ALTER
触发器会突然使触发器恢复生命(没有明确地ENABLE
- )?
我绝不是一名DBA,也不是一位SQL大师,所以如果它显而易见,我可以被置于耻辱的大厅里......
答案 0 :(得分:3)
好吧,我也无法在文档中找到它,但似乎ALTER
触发器确实启用了它:
create table dbo.t (col1 int)
go
create trigger tr on dbo.t instead of insert as insert into dbo.t values(1)
go
disable trigger tr on dbo.t
go
-- returns 1
select is_disabled from sys.triggers where parent_id = object_id('dbo.t')
go
alter trigger tr on dbo.t instead of insert as insert into dbo.t values(2)
go
-- now returns 0
select is_disabled from sys.triggers where parent_id = object_id('dbo.t')
go
drop table dbo.t
go
我认为这可以解释您所看到的行为。如果我必须完全猜测,我会说ALTER TRIGGER
是DROP TRIGGER
的(事务性)语法糖,然后是CREATE TRIGGER
,因此触发器会重新启用,因为它&# 39; s实际上是重新创建的,但这是纯粹的推测。