分享在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;
--更新一筆資料(會select出被刪除的資料,及更新後的資料)
UPDATE tbl_trigger
SET c1 = 3, c2 = 'c2-3'
WHERE c1 = 2;
請大家再依需求調整。
參考資料
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^