首頁 >資料庫 >mysql教程 >如何記錄修改 SQL Server 中特定資料表的 SQL 語句?

如何記錄修改 SQL Server 中特定資料表的 SQL 語句?

Barbara Streisand
Barbara Streisand原創
2025-01-03 09:58:391029瀏覽

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

建立觸發器來記錄影響表的SQL

要追蹤修改特定表的SQL 語句,您可以建立觸發器在那張桌子上。此觸發器可以擷取觸發更改的 SQL 查詢。

觸發器程式碼:

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

執行 SQL 的過程:

要執行觸發觸發的 SQL查詢,請建立一個流程:如下:

CREATE PROCEDURE [dbo].[UpdateProcedure]
AS
BEGIN
    UPDATE [dbo].[TableName] SET ColumnName = 'UpdatedValue' WHERE Condition;
END

使用觸發器:

建立觸發器和流程後,您可以使用下列步驟來記錄影響表的SQL:

  1. 創建一個表來存儲日誌信息:
CREATE TABLE [dbo].[LogTable] (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    SQLText NVARCHAR(MAX),
    TableName NVARCHAR(128),
    UpdateDate DATETIME
);
  1. 執行更新過程:
EXEC [dbo].[UpdateProcedure];
  1. 查看LogTable,查看捕獲的SQL語句及其他相關資訊到更新操作。

使用替代方法XEvents:

或者,您可以使用 SQL Server 擴充事件來擷取修改特定資料表的 SQL 語句。與觸發器相比,這提供了更詳細的資訊和靈活性。

設定:

  1. 宣告一個變數來捕捉執行上下文:
DECLARE @ContextID NVARCHAR(1024);
  1. 為目標上的sql_statement_completed 事件啟用XEvent追蹤表:
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. 開始追蹤:
EXEC sp_trace_start 1;
  1. 執行更新操作。
  2. 停止追蹤:
EXEC sp_trace_stop 1;
  1. 查詢XEvent 追蹤:
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);

以上是如何記錄修改 SQL Server 中特定資料表的 SQL 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn