Wyłącz opcję Włącz serwer Trigger SQL dla tabeli


130

Chcę utworzyć jeden proc, jak poniżej, ale zawiera błąd w składni. Czy ktoś mógłby wskazać na problem?

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'.

Odpowiedzi:


245

użyj zamiast tego następujących poleceń:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

3
do jakich wersji SqlServer jest to przydatne? nie pracuje dla mnie, podczas gdy DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]pracował
— Maslow

1
Twoja odpowiedź jest prawidłowa. Ale w rzeczywistości instrukcje @pang nie wymagają żadnej poprawki zamiast prostego ;! Wolę używać ENABLE Trigger. Ma zastosowanie na wszystkich serwerach SQL począwszy od 2008 r.
— ABS

Jeśli chcesz zrobić wszystkie tabele w bazie danych, użyj tego: EXECUTE sp_msforeachtable "ALTER TABLE? Disable trigger ALL" go
— John Dyer

73

Wiersz poprzedzający musi kończyć się znakiem, ;ponieważ w SQL DISABLE nie jest słowem kluczowym . Na przykład:

BEGIN
;
DISABLE TRIGGER ...

11
O wiele bardziej wolę tę odpowiedź. Rozwiązuje problem i podaje rozwiązanie zamiast obejścia. Chociaż obejścia mają swoje miejsce, ważne jest, aby zrozumieć, dlaczego wystąpił błąd, zamiast ślepo zastosować obejście bez kontekstu.
— Bpainter

13

Jak wspomniał Marek, poprzednie stwierdzenie należy zakończyć średnikiem. Możesz więc użyć:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name

2

Po ENABLE TRIGGER LUB DISABLE TRIGGER w nowym wierszu napisz GO, Przykład:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO

0

Poniżej znajduje się skrypt dynamiczny do włączania lub wyłączania wyzwalaczy.

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

jeśli chcesz wykonać ENABLE TRIGGER bezpośrednio ze źródła:

nie możemy tak pisać:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

zamiast tego możemy napisać:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"

-1

Poniżej znajduje się najprostszy sposób

Wypróbuj kod

ALTER TRIGGER trigger_name DISABLE

Otóż ​​to :)


Nie działa na SQL Server> 2008 R2, a pytanie dotyczy MS SQL Server
— kuklei,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.