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
Freigeben: 2025-01-03 09:58:39
Original
1081 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
);
Nach dem Login kopieren
  1. Führen Sie den Aktualisierungsvorgang aus:
EXEC [dbo].[UpdateProcedure];
Nach dem Login kopieren
  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);
Nach dem Login kopieren
  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]);
Nach dem Login kopieren
  1. Ablaufverfolgung starten:
EXEC sp_trace_start 1;
Nach dem Login kopieren
  1. Aktualisierungsvorgang durchführen.
  2. Ablaufverfolgung beenden:
EXEC sp_trace_stop 1;
Nach dem Login kopieren
  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);
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage