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

SQL Server 觸發器實戰範例:INSERT/UPDATE/DELETE 三類觸發器完整程式碼

     編輯:關於SqlServer

INSERT 觸發器:攔截特定學號插入

CREATE TRIGGER tri_insert
ON student
FOR INSERT
AS
BEGIN
    DECLARE @student_id CHAR(10);
    SELECT @student_id = s.student_id
    FROM student s INNER JOIN inserted i ON s.student_id = i.student_id;
    
    IF @student_id = '0000000001'
    BEGIN
        RAISERROR('不能插入 1 的學號!', 16, 8);
        ROLLBACK TRAN;
    END
END;
GO

UPDATE 觸發器:禁止修改學號

CREATE TRIGGER tri_update
ON student
FOR UPDATE
AS
BEGIN
    IF UPDATE(student_id)
    BEGIN
        RAISERROR('學號不能修改!', 16, 8);
        ROLLBACK TRAN;
    END
END;
GO

DELETE 觸發器:保護管理員帳號不被刪除

CREATE TRIGGER tri_delete
ON student
FOR DELETE
AS
BEGIN
    DECLARE @student_id VARCHAR(10);
    SELECT @student_id = student_id FROM deleted;
    
    IF @student_id = 'admin'
    BEGIN
        RAISERROR('錯誤', 16, 8);
        ROLLBACK TRAN;
    END
END;
GO

關鍵技術點總結

觸發器類型虛擬表常用檢查函數典型應用
INSERTinsertedJOIN inserted 比對新值資料驗證、自動編碼、審計日誌
UPDATEinserted, deletedUPDATE(column_name)欄位變更攔截、歷史追蹤、防惡意修改
DELETEdeleted直接查詢 deleted關鍵資料保護、級聯刪除檢查、軟刪除實作

最佳實務提醒

  • 觸發器屬同一交易,避免長時間運算或外部呼叫 造成封鎖
  • 使用 SET NOCOUNT ON 減少網路傳輸
  • 多重觸發器順序可用 sp_settriggerorder 設定
  • INSTEAD OF 觸發器可替代基表操作,實現複雜視圖更新
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved