Maison >base de données >tutoriel mysql >Comment puis-je enregistrer les instructions SQL qui modifient une table spécifique dans 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 :
CREATE TABLE [dbo].[LogTable] ( ID INT IDENTITY(1,1) PRIMARY KEY, SQLText NVARCHAR(MAX), TableName NVARCHAR(128), UpdateDate DATETIME );
EXEC [dbo].[UpdateProcedure];
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 :
DECLARE @ContextID NVARCHAR(1024);
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]);
EXEC sp_trace_start 1;
EXEC sp_trace_stop 1;
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!