Maison >base de données >tutoriel mysql >Comment puis-je enregistrer les instructions SQL qui modifient une table spécifique dans SQL Server ?

Comment puis-je enregistrer les instructions SQL qui modifient une table spécifique dans SQL Server ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 09:58:391013parcourir

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

Création d'un déclencheur pour enregistrer le SQL ayant affecté la table

Pour tracer les instructions SQL qui modifient une table spécifique, vous pouvez créer un déclencheur sur cette table. Ce déclencheur peut capturer la requête SQL qui a déclenché la modification.

Code déclencheur :

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

Procédure d'exécution de SQL :

Pour exécuter la requête SQL qui déclenche le déclencheur, créez une procédure comme suit :

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

Utilisation du déclencheur :

Après avoir créé le déclencheur et la procédure, vous pouvez utiliser les étapes suivantes pour enregistrer le SQL qui a affecté la table :

  1. Créer un tableau pour stocker le journal informations :
CREATE TABLE [dbo].[LogTable] (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    SQLText NVARCHAR(MAX),
    TableName NVARCHAR(128),
    UpdateDate DATETIME
);
  1. Exécutez la procédure de mise à jour :
EXEC [dbo].[UpdateProcedure];
  1. Vérifiez le LogTable pour afficher l'instruction SQL capturée et d'autres informations liées à l'opération de mise à jour.

Approche alternative utilisant XEvents :

Vous pouvez également utiliser les événements étendus SQL Server pour capturer les instructions SQL qui modifient une table spécifique. Cela fournit des informations plus détaillées et une flexibilité par rapport aux déclencheurs.

Configuration :

  1. Déclarez une variable pour capturer le contexte d'exécution :
DECLARE @ContextID NVARCHAR(1024);
  1. Activer le traçage XEvent pour les événements sql_statement_completed sur la cible table :
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. Démarrer le traçage :
EXEC sp_trace_start 1;
  1. Effectuer l'opération de mise à jour.
  2. Arrêter le traçage :
EXEC sp_trace_stop 1;
  1. Interroger le XEvent trace :
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);

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn