SQL Server 2005: T-SQL, um einen Trigger vorübergehend zu deaktivieren
Ist es möglich, deaktivieren Sie einen trigger für einen batch von Befehlen und aktivieren Sie es, wenn der batch fertig ist?
Ich bin sicher, ich könnte den trigger löschen und wieder neu hinzufügen, aber ich Frage mich, ob es einen anderen Weg.
InformationsquelleAutor der Frage Austin Salonen | 2008-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://msdn.microsoft.com/en-us/library/ms189748(SQL.90).aspx
gefolgt von der inversen:
http://msdn.microsoft.com/en-us/library/ms182706(SQL.90).aspx
InformationsquelleAutor der Antwort Matt Rogish
Manchmal zum Auffüllen einer leeren Datenbank, die aus einer externen Datenquelle oder Debuggen ein problem in der Datenbank muss ich ALLE deaktivieren von Triggern und constraints.
Zu tun, so dass ich den folgenden code verwenden:
Zu deaktivieren, die alle constraints und Trigger:
Zu ermöglichen, allen Einschränkungen und Trigger:
Fand ich, dass die Lösung vor einiger Zeit auf SQLServerCentralaber zu ändern brauchte das aktivieren von Einschränkungen Teil wie das original funktionierte nicht vollständig
InformationsquelleAutor der Antwort kristof
Ist es jedoch fast immer eine schlechte Idee, dies zu tun. Sie Durcheinander mit der Integrität der Datenbank. Tun Sie dies nicht ohne Berücksichtigung der Konsequenzen und der überprüfung mit den dbas, wenn Sie Sie haben.
Wenn Sie das tun, Folgen Sie Matt ' s code werden Sie sicher zu erinnern, drehen Sie den trigger wieder auf. Und denken Sie daran, den trigger deaktiviert ist für jeden das einfügen, aktualisieren oder löschen aus der Tabelle, während es ausgeschaltet ist, nicht nur für Ihren Prozess, so dass, wenn es getan werden muss, dann tun Sie es während der Stunden, wenn die Datenbank am wenigsten aktiven (und am besten im single-user-Modus).
Wenn Sie brauchen, um dies zu tun, um den import einer großen Menge von Daten, dann Bedenken Sie, dass bulk insert nicht die Trigger auslösen. Aber dann ist dein Prozess nach der bulk insert zu beheben, bis keine Integrität der Daten Probleme, die Sie einführen können, noch feuern Sie den Auslöser.
InformationsquelleAutor der Antwort HLGEM
Verlängern Matt ' s Antwort, hier ist ein Beispiel gegeben, auf MSDN.
InformationsquelleAutor der Antwort Daniel Imms
Ein weiterer Ansatz ist, um effektiv deaktivieren den Auslöser, ohne tatsächlich zu deaktivieren, mithilfe eines zusätzlichen Status-variable, ist eingebunden in den trigger.
Für den Staat variable konnte man Lesen, die irgendeine Art von Sperre-control-record in eine Tabelle (am besten, wenn beschränkt auf den Kontext der aktuellen Sitzung), die Verwendung der CONTEXT_INFO(), oder verwenden Sie die Anwesenheit einer bestimmten temp-Tabelle name (ist schon Gültigkeitsbereich einer session beschränkt):
Dann auf alle deaktivieren Trigger:
Eine potentiell große Nachteil ist, dass der Auslöser permanent verlangsamt in Abhängigkeit von der Komplexität der Zugriff auf die state-variable.
Bearbeiten: das Hinzufügen einer Referenz zu diesem erstaunlich ähnlich 2008 Beitrag von Samuel Vanga.
InformationsquelleAutor der Antwort crokusek
InformationsquelleAutor der Antwort ABHISHEK GANGULY
Nicht die beste Antwort für die batch-Programmierung, aber für andere, die finden diese Frage auf der Suche nach einem schnellen und einfachen Weg, um vorübergehend deaktivieren Sie einen trigger, der dies erreicht werden kann, in SQL Server Management Studio.
Folgen Sie den gleichen Prozess wieder zu aktivieren.
InformationsquelleAutor der Antwort Jeff Puckett