ホームページ >データベース >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. ログテーブルを確認して、キャプチャされた 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。