2

失去了一个触发器。我知道它是活动的,因为当我尝试更改字段时,它会恢复其值,并且从 SQL Server Management Studio 我可以看到,当我执行查询时,正在执行一个额外的查询(触发器)。

我试过SELECT * FROM sys.triggers WHERE 1 = 1了,但它没有返回任何东西。另外,我知道触发器的名称,但是当我尝试ALTER它时返回一个错误,说

对象“myTrigger”的名称无效。

如果我尝试DROP TRIGGER myTrigger ON DATABASE

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

4

2 回答 2

2

好的,正如 Lieven 所说,我没有查询正确的数据库......这很奇怪,因为查询已经定义了数据库

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

但是 SQL Server Management Studio 的上层选择指向其他数据库......


编辑: 我一直在调查(试图清理我的图像),我在 SQL Server Management Studio 上发现了一个奇怪的行为。如果您执行如下查询:

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

它在正确的数据库中执行查询。无论上层选择指向什么数据库。

但是,如果你尝试用触发器做同样的事情,你必须让上面的选择指向正确的 DB,否则你将面临同样的问题。

于 2012-08-23T10:41:41.100 回答
0

我有一个像你一样的微妙错误;我做了这样的事情:

CREATE TRIGGER [TrigCustomerInsertDelete] 

ON [mobile].[Customers] 

AFTER INSERT, DELETE   
AS  

    select 'I'  [ACTION],* from inserted
    select 'D'  [ACTION],* from deleted

GO  

然后尝试使用以下方法更新它:

更改触发器 [TrigCustomerInsertDelete]

并得到这个错误:无效的对象名称

问题是我没有在触发器上指定架构(认为它只是 dbo),但表确实有一个架构。因此,在触发器中包含架构后,我发现了错误。

创建触发器 [DBO].[TrigCustomerInsertDelete]

这给了我以下错误:无法创建触发器“DBO.TrigCustomerInsertDelete”,因为它的架构与目标表或视图的架构不同。

我知道这是一个旧帖子,但希望它可以帮助其他人。

于 2019-01-25T00:37:56.940 回答