首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

透過 Trigger 限制 SQL Server 表的更新與刪除筆數

     編輯:關於SqlServer

應用場景

防止開發人員或維護人員在未加 WHERE 條件的情況下,誤執行大量 UPDATE 或 DELETE 陳述式,導致資料異動過多造成業務影響。透過 DML Trigger 在資料庫層面攔截超過閾值的異動操作。

觸發器範例

CREATE TRIGGER tr_tblTime
ON tblTime
FOR UPDATE, DELETE
AS
BEGIN
    IF ORIGINAL_LOGIN() IN ('wind', 'snow')
    AND (SELECT COUNT(*) FROM deleted) > 10
    BEGIN
        RAISERROR('Serious error, please contact the DBA', 16, 1);
        ROLLBACK TRANSACTION;
        RETURN;
    END
END
GO

關鍵邏輯解析

元素說明
FOR UPDATE, DELETE僅針對 UPDATE 與 DELETE 操作觸發
ORIGINAL_LOGIN()取得原始登入帳號,不受 EXECUTE AS 影響
deleted 虛擬表儲存被刪除或更新前的舊資料列
COUNT(*) > 10判斷異動筆數是否超過 10 筆
RAISERROR + ROLLBACK拋出錯誤並回滾交易

效能考量

⚠ 注意: Trigger 會在每次 DML 操作時執行,若該表頻繁進行大量異動,會顯著影響效能。建議:

  • 僅在核心業務表、低頻異動表上部署
  • 避免在高吞吐量的記錄類資料表使用
  • 結合應用層面的權限控制,雙重保障

擴充建議

  • 將閾值 (10) 參數化,存放於設定表中,方便動態調整
  • 記錄被攔截的操作至稽核表,包含時間、帳號、影響筆數
  • 支援白名單機制,允許特定帳號或時間窗口執行大量異動
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved