使用 Trigger 防止誤刪交易資料表的作法

  • 1957
  • 0
  • 2012-05-28

使用 Trigger 防止誤刪交易資料表的作法

筆者遇到資料庫每月的交易資料,在未知狀況下會莫名的遺失,

經查所有程式、預存程序…等均找不到這段誤刪資料的程序。

為此另外建立一個資料表來控制是否可刪除資料,

資料就一個欄位,

image

並在原交易資料表中(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

 

對原交易資料表執行刪除的步驟:

  1. 當我們所知道到程式中要進行刪除前,須先將此資料表FLAG設定為 1。
  2. 進行資料表刪除動作。
  3. 將FLAG設定為 0 ,以防其他程序誤刪。

 

參考自:

Using INSTEAD OF triggers in SQL Server for DML operations

http://www.mssqltips.com/sqlservertip/1804/using-instead-of-triggers-in-sql-server-for-dml-operations/