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
Libérer: 2025-01-03 09:58:39
original
1026 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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
);
Copier après la connexion
  1. Exécutez la procédure de mise à jour :
EXEC [dbo].[UpdateProcedure];
Copier après la connexion
  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);
Copier après la connexion
  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]);
Copier après la connexion
  1. Démarrer le traçage :
EXEC sp_trace_start 1;
Copier après la connexion
  1. Effectuer l'opération de mise à jour.
  2. Arrêter le traçage :
EXEC sp_trace_stop 1;
Copier après la connexion
  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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal