LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SQLSERVER:触发器

admin
2024年2月21日 12:21 本文热度 406

在 SQL Server 中,触发器是一种特殊类型的存储过程,它会在满足特定条件时自动执行。触发器可以用于维护数据的完整性、执行业务规则、记录数据变更等。

触发器分为两大类:DML 触发器(包括 INSERT、UPDATE 和 DELETE)和 DDL 触发器(例如 CREATE、ALTER 和 DROP)。

实例数据表:AuditLog

假设我们有一个 AuditLog 表,用于记录 Employees 表中数据的变更情况。

LogIDEmployeeIDOperationChangeDate
12INSERT2023-01-01T12:00:00Z
23UPDATE2023-01-02T15:30:00Z

-- 创建AuditLog表CREATE TABLE AuditLog (    LogID INT IDENTITY(1,1) PRIMARY KEY,    EmployeeID INT,    Operation VARCHAR(100),    ChangeDate DATETIME);
-- 插入AuditLog表数据INSERT INTO AuditLog (EmployeeID, Operation, ChangeDate)VALUES (2, 'INSERT', '2023-01-01T12:00:00Z'),       (3, 'UPDATE', '2023-01-02T15:30:00Z');


实例数据表:Employees

我们还有一个 Employees 表,用于存储员工信息。

EmployeeIDFirstNameLastNamePosition
1JaneDoeManager
2JohnSmithDeveloper
3AliceJohnsonDeveloper

-- 创建Employees表CREATE TABLE Employees (    EmployeeID INT IDENTITY(1,1) PRIMARY KEY,    FirstName VARCHAR(100),    LastName VARCHAR(100),    Position VARCHAR(100),);
-- 插入Employees表数据INSERT INTO Employees (FirstName, LastName, Position)VALUES ('Jane', 'Doe', 'Manager'),       ('John', 'Smith', 'Developer'),       ('Alice', 'Johnson', 'Developer');


示例脚本 1:创建 INSERT 触发器

创建一个触发器,每当有新员工添加到 Employees 表时,就在 AuditLog 表中记录这个操作。

CREATE TRIGGER tr_Employees_AuditLog_Insert
ON Employees
AFTER INSERT
AS
BEGIN
    INSERT INTO AuditLog (EmployeeID, Operation, ChangeDate)
    SELECT i.EmployeeID, 'INSERT', GETUTCDATE()
    FROM inserted i;
END;
GO


在上面的触发器中,inserted 是一个特殊的表,它在 INSERT 操作期间存储了新插入的行。

示例脚本 2:执行 INSERT 操作

INSERT INTO Employees (FirstName, LastName, Position)
VALUES ('Emily', 'Clark', 'HR');
GO


执行这个 INSERT 操作后,触发器 tr_Employees_AuditLog_Insert 会自动执行,并在 AuditLog 表中插入一条新记录。

示例脚本 3:创建 UPDATE 触发器

创建一个触发器,每当 Employees 表的记录被更新时,在 AuditLog 表中记录这个操作。

CREATE TRIGGER tr_Employees_AuditLog_Update
ON Employees
AFTER UPDATE
AS
BEGIN
    INSERT INTO AuditLog (EmployeeID, Operation, ChangeDate)
    SELECT i.EmployeeID, 'UPDATE', GETUTCDATE()
    FROM inserted i;
END;
GO


在这个触发器中,inserted 表存储了更新操作后的新值。

示例脚本 4:执行 UPDATE 操作

UPDATE Employees
SET Position = 'Senior Developer'
WHERE EmployeeID = 2;
GO


执行这个 UPDATE 操作后,触发器 tr_Employees_AuditLog_Update 会自动执行,并在 AuditLog 表中插入一条新记录。

示例脚本 5:创建 DELETE 触发器

创建一个触发器,每当从 Employees 表中删除记录时,在 AuditLog 表中记录这个操作。

CREATE TRIGGER tr_Employees_AuditLog_Delete
ON Employees
AFTER DELETE
AS
BEGIN
    INSERT INTO AuditLog (EmployeeID, Operation, ChangeDate)
    SELECT d.EmployeeID, 'DELETE', GETUTCDATE()
    FROM deleted d;
END;
GO

在这个触发器中,deleted 表存储了被删除的行。

示例脚本 6:执行 DELETE 操作

DELETE FROM EmployeesWHERE EmployeeID = 3;GO

执行这个 DELETE 操作后,触发器 tr_Employees_AuditLog_Delete 会自动执行,并在 AuditLog 表中插入一条新记录。

触发器的注意事项

  • 触发器可以带来额外的开销,因此在设计时要考虑性能影响。

  • 触发器可以嵌套和递归,需要谨慎使用以避免复杂的依赖和难以追踪的错误。

  • 在事务中使用触发器时,触发器的操作会成为事务的一部分,如果触发器失败,整个事务可能会回滚。

总结

触发器是 SQL Server 中强大的工具,能够自动化和强化数据完整性、审计和业务逻辑的实施。正确地使用触发器可以帮助维护数据的一致性和可追溯性,但也要注意它们可能带来的性能和复杂性问题。设计触发器时,务必充分测试以确保它们的行为符合预期,并且不会对系统性能造成不利影响。


该文章在 2024/2/21 12:21:34 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved