使用 Trigger 防止誤刪交易資料表的作法
筆者遇到資料庫每月的交易資料,在未知狀況下會莫名的遺失,
經查所有程式、預存程序…等均找不到這段誤刪資料的程序。
為此另外建立一個資料表來控制是否可刪除資料,
資料就一個欄位,
並在原交易資料表中(M_ARRIVE) 新增一個Trigger,依旗標欄位判定是否可刪除。
/*==================================================
description: 刪除[M_ARRIVE]資料表, 會觸發檢查是否可以執行
author: Robin
date: 2012/05/25
testing code:
---------------------------------------------------
==================================================*/
CREATE TRIGGER INSTEADOF_TR_DELETE_M_ARRIVE
ON M_ARRIVE
INSTEAD OF DELETE AS
BEGIN
IF EXISTS(SELECT FLAG FROM M_ARRIVE_FLAG WHERE FLAG='1')
BEGIN
DELETE M_ARRIVE where issue_y+issue_m in (select issue_y+issue_m from deleted);
RETURN;
END
RAISERROR (N'資料表 M_ARRIVE 的目前不是可以刪除的狀態',16, 1)
END
對原交易資料表執行刪除的步驟:
- 當我們所知道到程式中要進行刪除前,須先將此資料表FLAG設定為 1。
- 進行資料表刪除動作。
- 將FLAG設定為 0 ,以防其他程序誤刪。
參考自: