Вимкнути Увімкнути триггер 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,

Якщо вам потрібно виконати всі таблиці в базі даних, скористайтеся цим: ВИКОНУЙТЕ sp_msforeachtable "ALTER TABLE? Disabled trigger ALL"
Джон Дайер

71

Рядок перед цим повинен закінчуватися символом a, ;оскільки в SQL DISABLE це не ключове слово . Наприклад:

BEGIN
;
DISABLE TRIGGER ...

10
Я дуже віддаю перевагу цій відповіді. Він вирішує проблему та дає рішення замість вирішення проблеми. Хоча обхідні шляхи мають своє місце, важливо зрозуміти, чому сталася помилка замість того, щоб сліпо слідувати вирішенню без контексту.
Bpainter

13

Як згадував Марк, попереднє твердження повинно закінчуватися напівкрапкою. Отже, ви можете використовувати:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Після ENABLE TRIGGER або DISABLE TRIGGER у новому рядку напишіть GO, Example:

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.