In speziellen Fällen ist es manchmal sinnvoll, wenn man gezielt Datenbankabfragen protokolliert.
Eine einfache Möglichkeit wäre ein Tabellen-Trigger, in dem das ausgeführte SQL-Statement ermittelt und beispielsweise in eine eigene Log-Tabelle geschrieben wird.
Ein Trigger, der als Ergebnis das ausgeführte Statement zurückgibt, könnte wie folgt erstellt werden.
CREATE TRIGGER GetSqlStatement
ON [dbo].[Produkte]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @TEMP TABLE
(EventType NVARCHAR(30), Parameters INT, EventInfo NVARCHAR(4000))
INSERT INTO @TEMP EXEC('DBCC INPUTBUFFER(@@SPID)')
SELECT EventInfo FROM @TEMP
END
GO
Wenn man nun ein DML-Statement wie z.B. ein Insert auf die entsprechende Tabelle absetzt, wird der Trigger ausgeführt und das gerade ausgeführte Statement zurückgegeben.![]()
So hätte man die Möglichkeit direkt im Trigger das Statement (EventInfo) wie gewünscht zu protokollieren. Es würden so jegliche inhaltliche Änderungen der Daten gespeichert werden.