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'.
ostry ból
źródło

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
Wael Dalloul
źródło
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 ...
Mark Kane
źródło
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
kaptan
źródło
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
Andrea
źródło
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
Shahab Naseer
źródło
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"
ar3003
źródło
-1

Poniżej znajduje się najprostszy sposób

Wypróbuj kod

ALTER TRIGGER trigger_name DISABLE

Otóż ​​to :)

kavita londhe
źródło
Nie działa na SQL Server> 2008 R2, a pytanie dotyczy MS SQL Server
kuklei,