Отключить Включить триггер SQL-сервера для таблицы

128

Я хочу создать одну процедуру, как показано ниже, но в ней есть синтаксическая ошибка. Может ли кто-нибудь указать на проблему?

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'.
острая боль
источник

Ответы:

242

вместо этого используйте следующие команды:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name
Ваэль Даллул
источник
3
для каких версий SqlServer это подходит? не работает у меня, пока DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]работал
Маслоу
1
Ваш ответ правильный. Но на самом деле операторы @pang не нуждаются ни в каком исправлении вместо простого ;! Я предпочитаю использовать ENABLE Trigger. Это применимо на всех серверах SQL, начиная с 2008 года.
ABS,
Если вам нужно сделать все таблицы в базе данных, используйте это: EXECUTE sp_msforeachtable «ALTER TABLE? Disable trigger ALL» go
John Dyer
72

Строка перед ним должна заканчиваться на, ;потому что в SQL DISABLE это не ключевое слово . Например:

BEGIN
;
DISABLE TRIGGER ...
Марк Кейн
источник
11
Я предпочитаю этот ответ. Он решает проблему и дает решение вместо обходного пути. Хотя обходные пути имеют свое место, важно понимать, почему произошла ошибка, вместо того, чтобы слепо следовать обходному пути без контекста.
Bpainter
13

Как уже упоминал Марк, предыдущий оператор должен заканчиваться точкой с запятой. Итак, вы можете использовать:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name
Kaptan
источник
2

После ENABLE TRIGGER OR DISABLE 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
Andrea
источник
0

Ниже приведен динамический сценарий для включения или отключения триггеров.

select 'alter table '+ (select Schema_name(schema_id) from sys.objects o 
where o.object_id = parent_id) + '.'+object_name(parent_id) + ' ENABLE TRIGGER '+
Name as EnableScript,*
from sys.triggers t 
where is_disabled = 1
Шахаб Насир
источник
0

если вы хотите выполнить ENABLE TRIGGER непосредственно из источника:

мы не можем так писать:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

вместо этого мы можем написать:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"
ar3003
источник
-1

Ниже представлен самый простой способ

Попробуйте код

ALTER TRIGGER trigger_name DISABLE

Это оно :)

Кавита Лондхе
источник
Не работает на SQL Server> 2008 R2, и вопрос касается MS SQL Server
kuklei 04