2009-09-07 86 views
98

我想創建一個像下面這樣的過程,但它的語法錯誤。 任何人都可以指出問題嗎?禁用啓用觸發器SQL服務器

Create PROCEDURE [dbo].[my_proc] AS 

BEGIN 

DISABLE TRIGGER dbo.tr_name ON dbo.table_name 

-- some update statement 

ENABLE TRIGGER dbo.tr_name ON dbo.table_name 

END 

** Error Message : Incorrect syntax near 'ENABLE'. 

回答

189

使用下面的命令,而不是:

ALTER TABLE table_name DISABLE TRIGGER tr_name 

ALTER TABLE table_name ENABLE TRIGGER tr_name 
+0

SqlServer的哪些版本適合這種情況?而不是爲我工作,而'DISABLE TRIGGER [dbo]。[tr_name] on [schema]。[table_name]'工作 – Maslow 2016-07-14 21:11:48

+0

它適用於我(Sql Server 2014)。 – 2016-11-01 08:12:29

+0

你的回答是正確的。但實際上,@ pang語句不需要任何修復而不是簡單的';'!我更喜歡使用'ENABLE Trigger'。它適用於從2008年開始的所有SQL Server。 – 2018-01-13 08:47:44

53

線需要之前因爲在SQL DISABLEis not a keyword;結束。例如:

BEGIN 
; 
DISABLE TRIGGER ... 
+7

我更喜歡這個答案。它解決了問題並提供瞭解決方案,而不是解決方法。儘管解決方法有其自身的功能,但重要的是要明白爲什麼會發生錯誤,而不是盲目地遵循無上下文的解決方法。 – Bpainter 2015-10-16 15:46:22

+2

這應該被標記爲正確的答案。 – eddiewould 2015-11-23 07:27:26

11

正如馬克提到的,前面的陳述應該以分號結尾。所以,你可以使用:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name 
0

下面是最簡單的方法

嘗試代碼

ALTER TRIGGER trigger_name DISABLE

就是這樣:)

0

後啓用觸發器或禁用TRIGGER在新行寫GO,例如:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name 

GO 
-- some update statement 

ENABLE TRIGGER dbo.tr_name ON dbo.table_name 

GO