下面是一个复杂的 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 表中。请根据您的实际需求进行修改和扩展。

SQL Server 插入更新触发器示例:记录员工姓名和部门变更

原文地址: https://www.cveoy.top/t/topic/p16e 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录