Gibt es in SQL Server 2005 eine Möglichkeit für einen Trigger, um herauszufinden, welches Objekt für das Auslösen des Triggers verantwortlich ist? Ich möchte dies verwenden, um den Trigger für eine gespeicherte Prozedur zu deaktivieren.Gibt es eine Möglichkeit, einen SQL Server-Trigger nur für einen bestimmten Ausführungsumfang zu deaktivieren?
Gibt es eine andere Möglichkeit, den Trigger nur für die aktuelle Transaktion zu deaktivieren? Ich könnte den folgenden Code verwenden, aber wenn ich mich nicht irre, würde es auch gleichzeitige Transaktionen beeinflussen - was eine schlechte Sache wäre.
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL } ON { object_name | DATABASE | ALL SERVER } [ ; ]
Wenn möglich, würde ich gerne die Technik mit einem „NoTrigger“ Feld in meinem Tisch zu vermeiden und ein NoTrigger = null
tun, weil ich den Tisch so klein wie möglich halten mag.
Der Grund, warum ich den Trigger vermeiden möchte, ist, weil er Logik enthält, die für manuelle Aktualisierungen der Tabelle wichtig ist, aber meine gespeicherte Prozedur wird sich um diese Logik kümmern. Weil dies eine sehr gebräuchliche Prozedur sein wird, möchte ich, dass es schnell ist.
Auslöser verursachen zusätzlichen Aufwand für den Server, weil sie eine implizite Transaktion initiieren. Sobald ein Trigger ausgeführt wird, wird eine neue implizite Transaktion gestartet, und jeder Datenabruf innerhalb einer Transaktion enthält Sperren für betroffene Tabellen.
Von: http://searchsqlserver.techtarget.com/tip/1,289483,sid87_gci1170220,00.html#trigger
Sie können ** Exec ** -Funktion verwenden, um Trigger aus einer gespeicherten Prozedur zu deaktivieren und zu aktivieren. Beispiel: 'EXEC ('ENABLE TRIGGER dbo.TriggerName auf dbo.TriggeredTable')' –