2012-08-23 64 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