Sql server 我的触发器是怎么被删除的?
如果你能弄明白这一点,你就是一个真正的SQL大师!这是我见过的最奇怪的事情之一 我在数据库的一个表中添加了一个触发器。服务器是SQL 2008。触发器没有做任何特别棘手的事情。当某些字段发生更改时,只需更改表中最后更新的字段。这是一个“更新后”触发器 <>有一个大型的C++遗留应用程序,它运行对数据库的各种大型查询。不知怎的(我完全不知道怎么做),它删除了这个触发器。它不会删除任何其他触发器,而且我确信它不会显式地删除触发器或表。这个应用的开发者甚至对我的触发器一无所知 这怎么可能 我尝试过使用SQL Server Profiler运行跟踪,并查看了它发送的每个命令,然后使用SQL Management Studio运行它们,但我的触发器没有受到影响。这似乎只有在我运行应用程序时才会发生。世跆联:( 更新: 抱歉,我不想浪费你的时间。我刚刚意识到,如果我更改触发器的名称,那么它不会被删除。此外,如果我修改触发器,使其不做任何事情,那么它仍然会被删除。从这一点上,我只能猜测其他开发人员正在显式删除它,但我已经在跟踪中搜索了触发器名称a不在那里。我会找他们麻烦,看看他们怎么说。谢谢你的建议 更新2: 其他开发人员认为他们没有明确删除它。它不存在于sys.objects或sys.triggers中,因此它不是SSM的故障。非常困惑:(我想我会重新命名它,希望一切顺利?想不出还有什么可以尝试的。下面的一些评论询问触发器是被删除还是被禁用或不工作。正如我所说的,它被完全删除了。此外,问题与触发器的实际内容无关。正如我所说的,我删除了内容并重新播放ce使用一些非常简单的代码,但它什么都不做,然后它仍然被删除 干杯Sql server 我的触发器是怎么被删除的?,sql-server,tsql,sql-server-2008,triggers,Sql Server,Tsql,Sql Server 2008,Triggers,如果你能弄明白这一点,你就是一个真正的SQL大师!这是我见过的最奇怪的事情之一 我在数据库的一个表中添加了一个触发器。服务器是SQL 2008。触发器没有做任何特别棘手的事情。当某些字段发生更改时,只需更改表中最后更新的字段。这是一个“更新后”触发器 有一个大型的C++遗留应用程序,它运行对数据库的各种大型查询。不知怎的(我完全不知道怎么做),它删除了这个触发器。它不会删除任何其他触发器,而且我确信它不会显式地删除触发器或表。这个应用的开发者甚至对我的触发器一无所知 这怎么可能 我尝试过使用SQ
标记使用表中的MERGE命令检查它将导致触发器获取错误想法:
- 删除触发器需要ALTER permission=应用程序不应使用
- 可以使用ALTER TABLE禁用触发器
- 如果在开始时测试@ROWCOUNT以捕获虚拟更新等,则可能会混淆触发器
- 触发器是否仅针对单行编码,并且似乎未运行
- 触发器是否存在于sys.objects/sys.triggers中:不要依赖SSMS中的对象资源管理器
- 如果删除并重新创建表,则可以删除触发器
- 不会为TRUNCATE表触发触发器
GO
语句
脚本1
IF EXISTS (....)
DROP PROC MyProc
GO
CREATE PROC MyProc
.....
/* GO statement is missing */
脚本2
IF EXISTS (....)
DROP TRIGGER MyDisappearingTrigger
GO
CREATE TRIGGER MyDisappearingTrigger
.....
GO
当我在对象浏览器中检查MyProc
时,它看起来是这样的:
CREATE PROC MyProc
AS
...
IF EXISTS (....)
DROP TRIGGER MyDisappearingTrigger
GO
因此,这意味着每次调用存储的进程时,触发器也会被删除。似乎并不是只有您一个人会自动删除触发器:是删除触发器,还是似乎触发器在所有情况下都不会触发/工作?如果是后者,我们可能需要查看触发器的主体(但我猜可能是一个触发器,它假定插入/删除中只有一行)太棒了,问题出在椅子和键盘之间…:DHi@GBN。谢谢你的有用评论。我检查了sys表,触发器真的被删除了。它没有失败或出现问题。它只是被完全删除了。我对为另一个应用设置的权限做不了太多。我只想重命名它,因为那样它就不会被删除了不要删除。也许有一天我会发现这里发生了什么。干杯,马克。