Heim >Datenbank >MySQL-Tutorial >Wie kann ich SQL-Anweisungen protokollieren, die eine bestimmte Tabelle in SQL Server ändern?

Wie kann ich SQL-Anweisungen protokollieren, die eine bestimmte Tabelle in SQL Server ändern?

Barbara Streisand
Barbara StreisandOriginal
2025-01-03 09:58:391015Durchsuche

How Can I Log SQL Statements That Modify a Specific Table in SQL Server?

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:

  1. Erstellen Sie eine Tabelle zum Speichern des Protokolls Informationen:
CREATE TABLE [dbo].[LogTable] (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    SQLText NVARCHAR(MAX),
    TableName NVARCHAR(128),
    UpdateDate DATETIME
);
  1. Führen Sie den Aktualisierungsvorgang aus:
EXEC [dbo].[UpdateProcedure];
  1. Überprüfen Sie die LogTable, um die erfasste SQL-Anweisung und andere damit verbundene Informationen anzuzeigen zum Aktualisierungsvorgang.

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:

  1. Deklarieren Sie eine Variable, um den Ausführungskontext zu erfassen:
DECLARE @ContextID NVARCHAR(1024);
  1. Aktivieren Sie die XEvent-Ablaufverfolgung für sql_statement_completed-Ereignisse auf dem Ziel Tabelle:
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]);
  1. Ablaufverfolgung starten:
EXEC sp_trace_start 1;
  1. Aktualisierungsvorgang durchführen.
  2. Ablaufverfolgung beenden:
EXEC sp_trace_stop 1;
  1. Fragen Sie das XEvent ab Spur:
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn