2012-08-23 59 views
2

我有丢失了触发器。我知道它是活跃的,因为当我尝试更改一个字段时,它会恢复其值,并且从SQL Server Management Studio中可以看到,当我执行查询时,正在执行额外的一个(触发器)。我试过SELECT * FROM sys.triggers WHERE 1 = 1但它不返回任何东西。另外,我知道触发器的名称,但是当我尝试ALTER时,它返回一个错误,说在SQL Server中丢失触发器

对象'myTrigger'的名称无效。

如果我尝试DROP TRIGGER myTrigger ON DATABASE

触发器“myTrigger”不能被删除,因为它不存在,或者用户没有足够的权限的。

+2

也许在这里说明这个问题,但是1)确保你正在执行你期望触发器打开的实际数据库上的select语句,并且2)验证你正在使用正确的所有者来查看触发器。 –

+0

“或用户没有足够的权限。”可能会提示您可能无法看到触发器的原因 - 您在数据库中拥有哪些权限? –

+0

触发器是数据库触发器,因为drop命令指示或不同类型的触发器(例如服务器或表) –

回答

2

好,为列文说,我并没有查询合适的数据库......这很奇怪,因为查询已经在数据库上定义

ALTER TRIGGER myTrigger 
ON [DB].[dbo].[table] 

但上部选择在SQL Server中管理工作室是指向其他数据库...


编辑: 我一直在调查一点点(试图清理我的形象),而且我发现在SQL Server Management Studio中一个怪异的行为。 如果你执行一个查询,如:

UPDATE [DB].[dbo].[table] SET column = 'value' WHERE column2 = 'foo' 

它执行正确的数据库查询。无论上面的select都指向哪个DB。

,如果你试图做同样的,与触发器,你必须有上选择指向正确的DB,否则你将面临我有同样的问题。

+1

欢迎来到“耻辱大厅”,别担心,你永远赶不上我:) –

+0

@Lieven我LOL'd :) – eversor