Sql server 我的触发器是怎么被删除的?

Sql server 我的触发器是怎么被删除的?,sql-server,tsql,sql-server-2008,triggers,Sql Server,Tsql,Sql Server 2008,Triggers,如果你能弄明白这一点,你就是一个真正的SQL大师!这是我见过的最奇怪的事情之一 我在数据库的一个表中添加了一个触发器。服务器是SQL 2008。触发器没有做任何特别棘手的事情。当某些字段发生更改时,只需更改表中最后更新的字段。这是一个“更新后”触发器 有一个大型的C++遗留应用程序,它运行对数据库的各种大型查询。不知怎的(我完全不知道怎么做),它删除了这个触发器。它不会删除任何其他触发器,而且我确信它不会显式地删除触发器或表。这个应用的开发者甚至对我的触发器一无所知 这怎么可能 我尝试过使用SQ

如果你能弄明白这一点,你就是一个真正的SQL大师!这是我见过的最奇怪的事情之一

我在数据库的一个表中添加了一个触发器。服务器是SQL 2008。触发器没有做任何特别棘手的事情。当某些字段发生更改时,只需更改表中最后更新的字段。这是一个“更新后”触发器

<>有一个大型的C++遗留应用程序,它运行对数据库的各种大型查询。不知怎的(我完全不知道怎么做),它删除了这个触发器。它不会删除任何其他触发器,而且我确信它不会显式地删除触发器或表。这个应用的开发者甚至对我的触发器一无所知

这怎么可能

我尝试过使用SQL Server Profiler运行跟踪,并查看了它发送的每个命令,然后使用SQL Management Studio运行它们,但我的触发器没有受到影响。这似乎只有在我运行应用程序时才会发生。世跆联:(

更新:

抱歉,我不想浪费你的时间。我刚刚意识到,如果我更改触发器的名称,那么它不会被删除。此外,如果我修改触发器,使其不做任何事情,那么它仍然会被删除。从这一点上,我只能猜测其他开发人员正在显式删除它,但我已经在跟踪中搜索了触发器名称a不在那里。我会找他们麻烦,看看他们怎么说。谢谢你的建议

更新2:

其他开发人员认为他们没有明确删除它。它不存在于sys.objects或sys.triggers中,因此它不是SSM的故障。非常困惑:(我想我会重新命名它,希望一切顺利?想不出还有什么可以尝试的。下面的一些评论询问触发器是被删除还是被禁用或不工作。正如我所说的,它被完全删除了。此外,问题与触发器的实际内容无关。正如我所说的,我删除了内容并重新播放ce使用一些非常简单的代码,但它什么都不做,然后它仍然被删除

干杯

标记

使用表中的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表,触发器真的被删除了。它没有失败或出现问题。它只是被完全删除了。我对为另一个应用设置的权限做不了太多。我只想重命名它,因为那样它就不会被删除了不要删除。也许有一天我会发现这里发生了什么。干杯,马克。