[SQL]在Trigger中記錄誰更新或刪除資料

分享在Trigger中記錄誰(登入名稱及連線的工作站名稱)更新或刪除資料

最近朋友問說想要在Trigger中記錄資料被誰更新或刪除,

我們可以透過 SUSER_SNAME()HOST_NAME() 這2個函數來取得登入名稱及連線的工作站名稱。

以下在tempdb中做測試,

USE tempdb
GO

--建立測試的資料表
IF OBJECT_ID('tbl_trigger') IS NOT NULL 
	DROP TABLE tbl_trigger;

CREATE TABLE tbl_trigger(
c1 INT,
c2 VARCHAR(30)
);

--新增2筆資料
INSERT INTO tbl_trigger(c1, c2) VALUES(1, 'c2_1');
INSERT INTO tbl_trigger(c1, c2) VALUES(2, 'c2_2');

--針對資料表,建立更新及刪除的trigger名稱為 record_delete
IF OBJECT_ID ('record_delete','TR') IS NOT NULL
    DROP TRIGGER record_delete
GO
CREATE TRIGGER record_delete
ON tbl_trigger
AFTER UPDATE, DELETE 
AS
BEGIN
	--被刪除或是被更新的資料
	SELECT *, SUSER_SNAME() AS loginUser, HOST_NAME() AS hostName FROM deleted;

	--更新後的資料
	SELECT *, SUSER_SNAME() AS loginUser, HOST_NAME() AS hostName FROM inserted;
END
    
GO

 

接下來就是針對 tbl_trigger 進行刪除及修改,如下,

--刪除一筆資料(會select出被刪除的資料,而更新後的資料是空的)
DELETE FROM tbl_trigger WHERE c1 = 1;  

image

 

--更新一筆資料(會select出被刪除的資料,及更新後的資料)
UPDATE tbl_trigger
SET c1 = 3, c2 = 'c2-3'
WHERE c1 = 2; 

image

 

請大家再依需求調整。

 

參考資料

SUSER_SNAME()

HOST_NAME()

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^