2009-05-27 21 views
3

Eines meiner Datenbankfelder in einer Tabelle wird durch einen Code verändert. Ich kann einfach nicht herausfinden, wo!Wie kann ich herausfinden, wenn ein Sql-Datenbankfeld geändert wird?

Also fragte ich mich, ob es einen Weg gibt, den ich herausfinden kann.

Ich benutze SQL 2008. Kann Profiler verwendet werden, um herauszufinden, ob ein bestimmtes Feld aktualisiert wird? Wie?

Was ist mit einem Auslöser? Wenn Sie einen Trigger (zB auf UPDATE) verwenden, können Sie feststellen, welcher Code sie aufgerufen hat? Wie kann der Auslöser dies "benachrichtigen"? E-Mail/Datei?

+0

Ich hoffe, dass Sie die Taxonomie Abzeichen für bekommen "ninja". – Eric

+1

Oder sogar für "Ninja-on-Feuer" –

Antwort

4

Ja, ein "AFTER UPDATE" -Auslöser für diese bestimmte Tabelle und dieses Feld könnte Ihnen Hinweise geben, wann und warum das Feld geändert wird.

Von Books Online:

CREATE TRIGGER reminder 
ON Person.Address 
AFTER UPDATE 
AS 
    IF (UPDATE (StateProvinceID) OR UPDATE (PostalCode)) 
    BEGIN 
    RAISERROR (50009, 16, 10) 
    END; 
GO 

Ein Trigger kann grundsätzlich jeden T-SQL-Code auszuführen - wenn Sie Datenbank-Mail korrekt eingerichtet haben, ist es Ihnen eine E-Mail schicken könnte, ja. Oder es kann einen Audit-Eintrag in eine andere Tabelle oder etwas Ähnliches schreiben.

EDIT: Wenn Sie herausfinden müssen, welche Anweisungen Ihre Spalte aktualisiert haben, können Sie eine Ablaufverfolgung auf dem Server, die auf diese bestimmte Tabelle beschränkt ist, tatsächlich besser ausführen und nur verfolgen, was dort passiert. Ich glaube nicht, dass Ihnen ein Auslöser diese Information geben kann (welcher Code hat das Update verursacht).

Marc

+0

Wenn ich einen Trigger verwenden muss, wie kann ich feststellen, welche SQL-Code versuchte, dieses Feld zu ändern? –

+0

Der Triggercode läuft grundsätzlich im Kontext des Aufrufers - z. Sie sollten in der Lage sein, Dinge wie CURRENT_USER und so zu überprüfen. Aber ich weiß wirklich nicht, ob Sie eine Möglichkeit haben, herauszufinden, welcher Teil des T-SQL-Codes die Tabelle aktualisiert hat. –

+0

Das sollte in Ordnung sein - RAISERROR und dann ROLLBACK. Der ROLLBACK oder RAISERROR sollte den Ninja-Code "brechen", wodurch er sich selbst aufdeckt. : D –

0

Ja, können Sie einen Trigger verwenden, um einige Code auszuführen (zu verfolgen, die aktualisiert die Tabelle, E-Mail Sie, etc.), wenn eine Tabelle aktualisiert wird. Siehe diesen Link: Track Updates with a Database Trigger

edit: ursprünglich den falschen Link gepostet

+0

.. aber wie kann ich herausfinden, was SQL-Code versucht, die Tabelle zu aktualisieren? –

+1

Ich kenne keine Möglichkeit, einen Trigger zu verwenden, um die Anweisung zu erhalten, die die Tabelle aktualisiert hat. Profiler protokolliert die Anweisung für Sie, Sie müssen sie jedoch ausführen, bevor die Anweisung ausgegeben wird. Wenn Sie nicht wissen, welcher Benutzer oder welche Sitzung verfolgt werden soll, wird dies wahrscheinlich zu einem riesigen Trace führen, den Sie dann durchsuchen müssen. –

Verwandte Themen