1. 什么是触发器
触发器是一种特殊的存储过程,它会在特定的数据库操作(如插入、更新或删除)发生时自动执行。可以通过创建触发器来执行自定义操作,从而满足业务需求。
在 SQL Server 中,触发器可以在表级别或视图级别创建,可用于保持数据的完整性、强制执行业务规则或记录日志。
2. 创建触发器
2.1 创建表并添加数据
在创建触发器之前,我们需要先创建表并添加一些数据来演示触发器的使用。
CREATE TABLE Employee (
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Age INT NOT NULL,
Salary DECIMAL(10,2) NOT NULL
);
INSERT INTO Employee VALUES (1, '张三', 25, 5000.00);
INSERT INTO Employee VALUES (2, '李四', 30, 8000.00);
INSERT INTO Employee VALUES (3, '王五', 35, 10000.00);
以上代码创建了一个名为 Employee 的表,并添加了三条记录。
2.2 创建触发器
下面我们创建一个名为 Employee_Audit 的触发器,用于记录每次在 Employee 表上的更新。
CREATE TRIGGER Employee_Audit
ON Employee
AFTER UPDATE
AS
BEGIN
INSERT INTO Employee_Audit (ID, Name, Old_Age, New_Age, Old_Salary, New_Salary)
SELECT
ID,
Name,
deleted.Age,
inserted.Age,
deleted.Salary,
inserted.Salary
FROM deleted
INNER JOIN inserted ON deleted.ID = inserted.ID;
END;
以上代码创建了一个触发器,当 Employee 表上执行 UPDATE 操作时,它会自动执行。在执行之前,触发器会将要更新的记录存储在 deleted
虚拟表中,更新后的记录存储在 inserted
虚拟表中,我们可以通过这些虚拟表访问旧值和新值。
在本例中,触发器会将 Employee 表中更新的记录插入到名为 Employee_Audit 的表中,并将旧值和新值分别存储在 Old_Age、New_Age、Old_Salary 和 New_Salary 字段中。
3. 测试触发器
我们可以通过执行以下语句测试触发器是否正常工作:
-- 更新记录
UPDATE Employee SET Age = 26 WHERE ID = 1;
-- 查看更新后的数据
SELECT * FROM Employee;
-- 查看存储在 Employee_Audit 表中的记录
SELECT * FROM Employee_Audit;
以上代码会将 Employee 表中 ID 为 1 的记录的年龄字段从 25 更新为 26,并将旧值和新值存储在 Employee_Audit 表中。
4. 修改和删除触发器
如果我们需要修改触发器,可以使用 ALTER TRIGGER 语句。例如,我们可以修改 Employee_Audit 触发器,使其在插入和删除操作时也执行。
ALTER TRIGGER Employee_Audit
ON Employee
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
-- 触发器代码
END;
如果要删除触发器,可以使用 DROP TRIGGER 语句:
DROP TRIGGER Employee_Audit;
5. 总结
本文介绍了 SQL Server 中触发器的基础知识,包括创建触发器、使用触发器记录数据更新、修改和删除触发器等操作。触发器是 SQL Server 中一个非常强大的功能,能够帮助我们更好地管理数据库。