Deaktivieren Sie Enable Trigger SQL Server für eine Tabelle

128

Ich möchte einen Prozess wie unten erstellen, aber er hat einen Syntaxfehler. Könnte jemand auf das Problem hinweisen?

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

Antworten:

242

Verwenden Sie stattdessen die folgenden Befehle:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name
Wael Dalloul
quelle
3
Für welche Versionen von SqlServer ist das gut? nicht für mich arbeiten, während DISABLE TRIGGER [dbo].[tr_name] on [schema].[table_name]gearbeitet
Maslow
1
Ihre Antwort ist richtig. Aber eigentlich brauchen @ pang-Anweisungen keine Korrektur anstelle einer einfachen ;! Ich benutze lieber ENABLE Trigger. Es ist auf allen SQL Servern ab 2008 anwendbar.
ABS
Wenn Sie alle Tabellen in einer Datenbank ausführen müssen, verwenden Sie Folgendes: EXECUTE sp_msforeachtable "ALTER TABLE? Trigger ALL deaktivieren" go
John Dyer
71

Die vorherige Zeile muss mit einem enden, ;da in SQL DISABLE kein Schlüsselwort ist . Beispielsweise:

BEGIN
;
DISABLE TRIGGER ...
Mark Kane
quelle
10
Ich bevorzuge diese Antwort sehr. Es behebt das Problem und bietet die Lösung anstelle einer Problemumgehung. Während Problemumgehungen ihren Platz haben, ist es wichtig zu verstehen, warum ein Fehler aufgetreten ist, anstatt blind einer Problemumgehung ohne Kontext zu folgen.
Bpainter
13

Wie Mark erwähnt hat, sollte die vorherige Aussage in einem Semikolon beendet werden. So können Sie verwenden:

; DISABLE TRIGGER dbo.tr_name ON dbo.table_name
kaptan
quelle
2

Nachdem Sie in einer neuen Zeile den TRIGGER AKTIVIEREN ODER DEN TRIGGER DEAKTIVIEREN, schreiben Sie GO. Beispiel:

DISABLE TRIGGER dbo.tr_name ON dbo.table_name

GO
-- some update statement

ENABLE TRIGGER dbo.tr_name  ON dbo.table_name

GO
Andrea
quelle
0

Unten finden Sie das dynamische Skript zum Aktivieren oder Deaktivieren der Trigger.

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
quelle
0

Wenn Sie ENABLE TRIGGER direkt von der Quelle ausführen möchten:

wir können nicht so schreiben:

Conn.Execute "ENABLE TRIGGER trigger_name ON table_name"

Stattdessen können wir schreiben:

Conn.Execute "ALTER TABLE table_name DISABLE TRIGGER trigger_name"
ar3003
quelle
-1

Unten ist der einfachste Weg

Probieren Sie den Code aus

ALTER TRIGGER trigger_name DISABLE

Das ist es :)

kavita londhe
quelle
Funktioniert nicht unter SQL Server> 2008 R2 und die Frage ist für MS SQL Server
kuklei