各位前輩好,
小弟有用Trigger記錄資料表的異動,
但目前只能記錄到異動的欄位及資料,
異動的SQL指令無法被紀錄下來.
請問這部份該如何處理呢?
有參考以下網址的內容:
Trigger的用法:
https://dotblogs.com.tw/jamesfu/2014/06/20/triggersample
如何找到執行中的程序:
https://www.huanlintalk.com/2012/05/sysdmexecrequests.html
也試著處理過.
但結果卻都是記下Trigger的指令, 而不是實際執行INSERT, UPDATE, DELETE的指令.
請各位前輩幫忙解惑.
謝謝.
以下是一個範例的 Trigger,可以在 INSERT、UPDATE、DELETE 時紀錄異動資料以及執行的 T-SQL 陳述式。
CREATE TRIGGER [dbo].[LogTableChanges]
ON [dbo].[MyTable]
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
DECLARE @event_type nvarchar(100), @schema_name nvarchar(100), @object_name nvarchar(100), @tsql nvarchar(max);
SELECT @event_type = EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)');
SELECT @schema_name = EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]', 'nvarchar(100)');
SELECT @object_name = EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(100)');
SELECT @tsql = EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(max)');
IF @event_type = 'INSERT'
BEGIN
-- Insert logic and logging here
END
IF @event_type = 'UPDATE'
BEGIN
-- Update logic and logging here
END
IF @event_type = 'DELETE'
BEGIN
-- Delete logic and logging here
END
-- Log the T-SQL statement
INSERT INTO [dbo].[LogTableChanges] (EventDateTime, EventType, SchemaName, ObjectName, TSQLCommand)
VALUES (GETDATE(), @event_type, @schema_name, @object_name, @tsql);
END