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

Antworten:


242

Verwenden Sie stattdessen die folgenden Befehle:

ALTER TABLE table_name DISABLE TRIGGER tr_name

ALTER TABLE table_name ENABLE TRIGGER tr_name

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

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

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

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

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"

-1

Unten ist der einfachste Weg

Probieren Sie den Code aus

ALTER TRIGGER trigger_name DISABLE

Das ist es :)


Funktioniert nicht unter SQL Server> 2008 R2 und die Frage ist für MS SQL Server
kuklei
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.