2009-09-07 57 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