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.