Heim >Datenbank >MySQL-Tutorial >Wie kann ich SQL-Anweisungen protokollieren, die eine bestimmte Tabelle in SQL Server ändern?
Erstellen eines Triggers zum Protokollieren von SQL, das die Tabelle beeinflusst hat
Um die SQL-Anweisungen zu verfolgen, die eine bestimmte Tabelle ändern, können Sie einen Trigger erstellen auf diesem Tisch. Dieser Trigger kann die SQL-Abfrage erfassen, die die Änderung ausgelöst hat.
Triggercode:
CREATE TRIGGER [dbo].[TriggerName] ON [dbo].[TableName] AFTER UPDATE AS BEGIN DECLARE @SQL NVARCHAR(MAX); SET @SQL = (SELECT TOP 1 text FROM sys.dm_exec_query_stats WHERE execution_count = 1 AND plan_handle = CONTEXT_INFO()); INSERT INTO [dbo].[LogTable] (SQLText, TableName, UpdateDate) VALUES (@SQL, OBJECT_SCHEMA_NAME(OBJECT_ID), GETDATE()); END
Verfahren zum Ausführen von SQL:
Um die SQL-Abfrage auszuführen, die den Trigger auslöst, erstellen Sie eine Prozedur als folgt:
CREATE PROCEDURE [dbo].[UpdateProcedure] AS BEGIN UPDATE [dbo].[TableName] SET ColumnName = 'UpdatedValue' WHERE Condition; END
Verwenden des Triggers:
Nachdem Sie den Trigger und die Prozedur erstellt haben, können Sie die folgenden Schritte verwenden, um die SQL zu protokollieren, die sich auf die Tabelle ausgewirkt hat:
CREATE TABLE [dbo].[LogTable] ( ID INT IDENTITY(1,1) PRIMARY KEY, SQLText NVARCHAR(MAX), TableName NVARCHAR(128), UpdateDate DATETIME );
EXEC [dbo].[UpdateProcedure];
Alternativer Ansatz mit XEvents:
Alternativ können Sie SQL Server Extended Events verwenden, um die SQL-Anweisungen zu erfassen, die eine bestimmte Tabelle ändern. Dies bietet detailliertere Informationen und Flexibilität im Vergleich zu Triggern.
Einrichtung:
DECLARE @ContextID NVARCHAR(1024);
ALTER DATABASE [TestDB] SET ENABLE_XEVENT = ON; EXEC sp_trace_create @trace_id = 1, @name = 'CaptureTableModifications', @destination = 4; EXEC sp_trace_setevent 1, 24, 1; EXEC sp_trace_setfilter 1, @columnname = 'object_id', @value = OBJECT_ID([dbo].[TableName]);
EXEC sp_trace_start 1;
EXEC sp_trace_stop 1;
SELECT session_id, session_nt_address, text FROM sys.fn_xe_file_target_read_file('c:\Temp\trace.xel', 'c:\Temp\trace.xem', NULL, NULL);
Das obige ist der detaillierte Inhalt vonWie kann ich SQL-Anweisungen protokollieren, die eine bestimmte Tabelle in SQL Server ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!