Frage

Ich weiß, über „Allow Trigger Andere Fire“ Servereinstellung, die die Aktion durch einen Trigger genommen ermöglicht einen weiteren Trigger ausgelöst (oder nicht), und wie ich es verstehe, meine einzigen Optionen sind True (erlauben Trigger andere Auslöser abzufeuern , die durch Trigger unending Rekursion) oder false (Maßnahmen wird nicht ausgelöst andere Auslöser, die führen kann zu unerwarteten Ergebnissen oder inkonsistente Daten).

führen

Gibt es eine Möglichkeit, eine „maximale Trigger Tiefe“ in SQL Server zu erzwingen? Ich verwende 2008, wenn es darauf ankommt, auch wenn ich auf einem beliebigen Version keine Kenntnis von der Funktion bin (oder in anderen RDBMS, was das betrifft, auch wenn mein Wissen ist zwar begrenzt). Zum Beispiel, hier ist, was Ich mag würde:

  1. Stellen Sie die "maximale Trigger Tiefe" auf "2".
  2. Ich lege eine Zeile in Tabelle 1
  3. Ein Auslöser für tabelle1 Einsätze in table2
  4. Ein Trigger auf table2 Einsätze in table3
  5. Es gibt einen Trigger auf table3, die in table4 einsetzen würden, aber da die maximale Tiefe 2 ist, entweder der Auslöser funktioniert einfach nicht laufen (weniger ideal, aber im Einklang mit dem aktuellen „rekursive Trigger = False“ Verhalten auf SQL Server) mit einem Fehler wird gerollt, oder die ganze Reihe von Einsätzen zurück und fällt wie „Maximum Triggertiefe (2) überschritten - Insert fehlgeschlagen“ Nachricht (ideal)

Hat jemand da draußen wissen, ob dies möglich ist, oder wenn es eine herausragendes Merkmal Anfrage für dieses Verhalten? Wenn ich verrückt bin, und das ist eine schreckliche Idee für das Verhalten, bin ich zu, dass offen, aber ich würde gerne wissen, warum (unbeabsichtigte Folgen, etc).

War es hilfreich?

Lösung

Innerhalb eines Triggers können Sie die Verschachtelung Ebene überprüfen und gegebenenfalls zurück:

IF (TRIGGER_NESTLEVEL() > 2)
    RETURN

Sehen Sie diese Blog-Post für weitere Details.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top