Es gibt einige gespeicherte Prozeduren, die routinemäßig von einigen verschiedenen Systemen aufgerufen werden, um einige Tabellen in unserer Datenbank zu warten. Einige sind automatisiert, andere nicht.
Eine der Tabellen hat eine Spalte, in der die Nummer manchmal aus ist, und wir wissen nicht genau, wann oder warum das passiert. Ich möchte einen Trigger auf den Tisch legen, damit ich sehen kann, was geändert wird und wann, aber es wäre auch hilfreich zu wissen, welches Verfahren die Änderung ausgelöst hat.
Ist es möglich, den Namen der gespeicherten Prozedur vom Trigger abzurufen? Wenn nicht, gibt es eine andere Möglichkeit zu sagen, was etwas verändert hat? (Ich spreche auch nicht über den Benutzer, der Name des Benutzers hilft in diesem Fall nicht).
können Sie versuchen: CONTEXT_INFO
Hier ist ein CONTEXT_INFO Verwendungsbeispiel:
fügen Sie in jeder Prozedur, die das einzufügende / löschende / zu aktualisierende Element, das Sie verfolgen möchten, Folgendes hinzu:
%Vor%Hier ist der Teil des Auslösers, um den Wert abzurufen:
%Vor%Unser System verwendet die CONTEXT_INFO-Variable bereits für einen anderen Zweck, so dass sie nicht verfügbar ist. Ich versuchte auch die DBCC INPUTBUFFER Lösung , die fast funktioniert hat. Das Zurückziehen zu dem Eingabepuffer ist, dass es nur die externe Aufrufprozedur zurückgibt. Bsp: procA ruft procB auf, das einen Trigger auslöst. Der Trigger führt DBCC INPUTBUFFER aus, der nur procA anzeigt. Da mein Trigger nach procB gesucht hat, ist dieser Ansatz fehlgeschlagen.
In der Zwischenzeit habe ich eine Staging-Tabelle erstellt. Jetzt ruft procA procB auf. procB fügt eine Zeile in die Staging-Tabelle ein und löst dann den Trigger aus. Der Trigger prüft die Staging-Tabelle und findet den procB-Eintrag. Bei der Rückkehr löscht procB seinen Eintrag aus der Staging-Tabelle. Es ist ein Shell-Spiel, aber es funktioniert. Ich wäre an jedem Feedback zu diesem Thema interessiert.
Tags und Links triggers sql-server-2005 stored-procedures