在 SQL Server 中,触发器是一种与表相关联的特殊存储过程,它们在对表进行 INSERT、UPDATE 或 DELETE 操作时自动执行。
SQL Server:触发器实例详解
在 SQL Server 中,触发器是一种与表相关联的特殊存储过程,它们在对表进行 INSERT、UPDATE 或 DELETE 操作时自动执行。
触发器的类型
SQL Server 支持以下两种类型的触发器:
- 
行触发器(Row Triggers):当某个行受到影响时,该触发器会被激活。例如,对某个行进行 INSERT、UPDATE 或 DELETE 操作时。 
- 
语句触发器(Statement Triggers):当执行某个 INSERT、UPDATE 或 DELETE 语句时,该触发器会被激活。 
创建触发器
在创建触发器之前,我们需要确定以下信息:
- 触发器所属的表名。
- 触发器激活的 INSERT、UPDATE 或 DELETE 操作类型。
- 激活触发器时的条件。
- 触发器所执行的操作。
创建触发器的语法:
CREATE TRIGGER [触发器名称]
[ON TableName]
[FOR INSERT, UPDATE, DELETE]
[AS]
BEGIN
    -- 触发器执行的语句
END;
触发器实例
示例 1:创建行触发器
假设我们在 Employee 表上创建了一个行触发器,当执行某个 UPDATE 操作时,如果更新的数据中薪水字段 Salary 大于 5000,则让该记录返回上一个状态。
CREATE TRIGGER Trig_Employee_Update
ON Employee
FOR UPDATE
AS
BEGIN
    DECLARE @OldValue DECIMAL(8, 2);
    SET @OldValue = (SELECT Salary FROM DELETED);
    IF (UPDATE(Salary) AND @OldValue > 5000)
    BEGIN
        RAISERROR ('Cannot update salary to a value greater than 5000.', 16, 1);
        ROLLBACK TRANSACTION;
        RETURN;
    END;
END;
上面的代码中,Trig_Employee_Update 是触发器的名称,Employee 是触发器所属的表名,FOR UPDATE 表示当执行 UPDATE 操作时触发器会被激活。
DECLARE 语句用于声明并定义一个局部变量,SET 语句用于给该变量赋值。由于我们需要检查修改前的薪水值,所以需要使用 DELETED 临时表来获取。
然后使用 IF 语句进行条件判断,判断 Salary 列是否有更新,并且更新后的薪水值是否大于 5000。
最后,如果符合条件,使用 RAISERROR 报错并使用 ROLLBACK TRANSACTION 回滚事务。
示例 2:创建语句触发器
我们可以在 Appointment 表上创建一个语句触发器,每次执行一个 INSERT、UPDATE 或 DELETE 操作时,在日志表 LogAppointment 中生成一条记录。
CREATE TRIGGER Trig_Appointment_Log
ON Appointment
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
    DECLARE @OperationType VARCHAR(10);
    IF EXISTS(SELECT * FROM INSERTED)
    BEGIN
        SET @OperationType = 'INSERT';
    END;
    IF EXISTS(SELECT * FROM UPDATED)
    BEGIN
        SET @OperationType = 'UPDATE';
    END;
    IF EXISTS(SELECT * FROM DELETED)
    BEGIN
        SET @OperationType = 'DELETE';
    END;
    INSERT INTO LogAppointment (OperationType, OperationTime)
    VALUES (@OperationType, GETDATE());
END;
上面的代码中,Trig_Appointment_Log 是触发器的名称,Appointment 是触发器所属的表名,AFTER INSERT, UPDATE, DELETE 表示当执行 INSERT、UPDATE 或 DELETE 语句时触发器会被激活。
使用 IF 语句判断当前操作类型,并根据操作类型插入数据到日志表 LogAppointment 中。
总结
在 SQL Server 中使用触发器可以简化复杂的业务逻辑,在对数据库进行增、删、改操作时执行自定义代码逻辑。要使用触发器,我们需要确定好触发的操作类型和触发的条件,并编写符合要求的代码。
本文标题为:SQL Server:触发器实例详解
 
				
         
 
            
        基础教程推荐
- MySQL慢查询以及解决方案详解 2023-07-27
- 数据库查询优化(主从表的设计) 2023-12-03
- MySQL慢查询优化之慢查询日志分析的实例教程 2023-12-17
- MySQL索引优化之适合构建索引的几种情况详解 2023-12-16
- IDEA连接mysql数据库报错的解决方法 2023-12-04
- Mysql CAST函数的具体使用 2022-08-31
- mysql left join的基本用法以及on与where的区别 2023-07-27
- mongodb出现id重复问题的简单解决办法 2023-07-15
- 面试官问我Mysql的存储引擎了解多少 2022-08-31
- 详解Centos 使用YUM安装MariaDB 2023-07-24
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
						 
						 
						 
						 
						 
				 
				 
				 
				