Отключить Включить триггер 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

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

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"

-1

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

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

ALTER TRIGGER trigger_name DISABLE

Это оно :)


Не работает на SQL Server> 2008 R2, и вопрос касается MS SQL Server
kuklei 04
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.