TSQL - das Deaktivieren von Triggern in Transaktionen
Ich habe die Suche hoch und niedrig, und ich habe nicht in der Lage zu finden, eine zufriedenstellende Antwort auf meine Frage. Die dazu neigt, einkochen, wie genau ein TRANSACTION
in SQL Server funktioniert.
Grundsätzlich wird das tun, was ich denke, es ist.
BEGIN TRAN
DISABLE [my_update_trigger] ON [my_table]
/*.. Do Some Updates ..*/
ENABLE [my_update_trigger] ON [my_table]
COMMIT TRAN
Ich möchte in der Lage zu beheben einige Daten in einer Tabelle, ohne die update-Trigger
Ich habe auf dem Tisch. Dies ist für eine web-app, so würde ich mag, um sicherzustellen, dass, wenn eine Aktualisierung erfolgt, auf den Tisch von der web-app, während ich Tue meine Arbeit, [my_update_trigger]
noch Feuer für die web-app.
- Es gibt bestehende post, die Ihnen helfen könnten [tsql Weg zu deaktivieren Sie einen trigger im Rahmen einer Transaktion][1] [1]: stackoverflow.com/questions/174600/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das update Zeug ist ok - das deaktivieren, aktivieren, etc.
Haben Sie einen Blick auf die msdn-Seite: http://msdn.microsoft.com/en-us/library/ms189748.aspx
Daran, session-spezifische aber: ich hatte Zweifel, ob das funktionieren würde - der deaktiviert/aktiviert werden DDL eher als DML, d.h. Sie wirken auf die Datenbank-Objekte, anstatt die Daten. Ich hätte nicht gedacht, dies wäre im Rahmen einer Transaktion
Ich habe einige tests und es scheint, dein code macht genau das, was Sie wollen, es zu tun. Hier ist mein test-Protokoll:
Darüber hinaus
SELECT is_disabled FROM sys.triggers where name = 'my_update_trigger';
zeigt, dass der trigger deaktiviert ist, wird nach Schritt 2 und aktiviert Sie nach Schritt 4.So, mein Fazit ist:
sys.triggers
), aberEin Wort der Vorsicht:
DISABLE TRIGGER
wird nicht ausgelöst, eine implizite Transaktion. Dies ist wichtig, wenn man mit (klassischen) ADO, daConnection.BeginTrans
nicht starten Sie eine explizite Transaktion, sondern wird eherSET IMPLICIT_TRANSACTION ON
. Sie brauchen, um eine der Operationen, die hier aufgelistet, bevor Sie den Auslöser oder dieDISABLE TRIGGER
- Anweisung wird außerhalb der Transaktion.