SQL Server 插入更新触发器示例:记录员工姓名和部门变更
下面是一个复杂的 SQL Server 插入更新触发器脚本示例,演示如何记录员工姓名和部门变更:
CREATE TRIGGER trg_UpdateEmployee
ON Employees
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT 1 FROM inserted)
BEGIN
-- 在更新之前保存旧值
DECLARE @OldEmployeeName VARCHAR(50);
DECLARE @OldDepartmentID INT;
SELECT @OldEmployeeName = EmployeeName, @OldDepartmentID = DepartmentID
FROM deleted;
-- 在更新之后保存新值
DECLARE @NewEmployeeName VARCHAR(50);
DECLARE @NewDepartmentID INT;
SELECT @NewEmployeeName = EmployeeName, @NewDepartmentID = DepartmentID
FROM inserted;
-- 如果更新了EmployeeName,则将其记录到日志表中
IF @OldEmployeeName <> @NewEmployeeName
BEGIN
INSERT INTO EmployeeLog (EmployeeID, LogEntry)
VALUES (@NewEmployeeID, 'EmployeeName changed from ' + @OldEmployeeName + ' to ' + @NewEmployeeName);
END;
-- 如果更新了DepartmentID,则将其记录到日志表中
IF @OldDepartmentID <> @NewDepartmentID
BEGIN
INSERT INTO DepartmentLog (EmployeeID, LogEntry)
VALUES (@NewEmployeeID, 'DepartmentID changed from ' + CAST(@OldDepartmentID AS VARCHAR) + ' to ' + CAST(@NewDepartmentID AS VARCHAR));
END;
END;
END;
这个触发器在 Employees 表上创建,并在插入和更新操作之后触发。它会检查插入或更新的行是否存在,然后保存旧值和新值,并根据需要执行一些操作。
在这个例子中,如果更新了 EmployeeName 字段,则会将该更改记录到 EmployeeLog 表中。如果更新了 DepartmentID 字段,则将该更改记录到 DepartmentLog 表中。请根据您的实际需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/p16e 著作权归作者所有。请勿转载和采集!