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