Donnerstag, 27. März 2014

Ausgeführte SQL-Statements ermitteln bzw. loggen

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.

GetStatement


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.