>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 특정 테이블을 수정하는 SQL 문을 어떻게 기록할 수 있습니까?

SQL Server에서 특정 테이블을 수정하는 SQL 문을 어떻게 기록할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-03 09:58:391014검색

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으로 문의하세요.