w3resource

Creating a Trigger for Audit Logging


Create a Trigger for Audit Logging

Write a SQL query to create a trigger that logs all insert, update, and delete operations on a table.

Solution:

-- Create a trigger for audit logging.
CREATE TRIGGER trg_AuditEmployeeChanges
ON Employees -- Specify the table to monitor.
AFTER INSERT, UPDATE, DELETE -- Trigger fires after insert, update, or delete operations.
AS
BEGIN
    IF EXISTS (SELECT 1 FROM inserted) AND EXISTS (SELECT 1 FROM deleted)
    BEGIN
        -- Log updates.
        INSERT INTO EmployeeAudit (EmployeeID, Operation, ChangeDate)
        SELECT i.EmployeeID, 'UPDATE', GETDATE()
        FROM inserted i;
    END
    ELSE IF EXISTS (SELECT 1 FROM inserted)
    BEGIN
        -- Log inserts.
        INSERT INTO EmployeeAudit (EmployeeID, Operation, ChangeDate)
        SELECT i.EmployeeID, 'INSERT', GETDATE()
        FROM inserted i;
    END
    ELSE IF EXISTS (SELECT 1 FROM deleted)
    BEGIN
        -- Log deletes.
        INSERT INTO EmployeeAudit (EmployeeID, Operation, ChangeDate)
        SELECT d.EmployeeID, 'DELETE', GETDATE()
        FROM deleted d;
    END
END;

Explanation:

    1. Purpose of the Query :

    1. The goal is to create a trigger that logs all changes (inserts, updates, and deletes) made to the Employees table.

    2. Key Components :

    1. AFTER INSERT, UPDATE, DELETE : Specifies when the trigger should fire.
    2. Inserted and Deleted Tables : Track old and new values for updates, inserts, and deletes.
    3. EmployeeAudit Table : Logs the changes for auditing purposes.

    3. Why Use Audit Logging? :

    1. Audit logging ensures accountability and provides a history of changes for compliance and debugging.

    4. Real-World Application :

    1. For example, in financial systems, you might use this trigger to log all changes to sensitive data like salaries.

Additional Notes:

  • Ensure the audit table (EmployeeAudit) is properly indexed to maintain performance.
  • Use this exercise to teach the importance of tracking changes for regulatory compliance.

For more Practice: Solve these Related Problems:

  • Write a SQL query to create a trigger that logs all changes made to a table, including old and new values, into a comprehensive audit trail.
  • Write a SQL query to create a trigger that captures metadata about each change, such as the user who made the change and the timestamp.
  • Write a SQL query to create a trigger that logs changes to sensitive fields separately for enhanced security monitoring.
  • Write a SQL query to create a trigger that archives deleted records into a historical table instead of permanently removing them.

Go to:


PREV : Create a Table-Valued Function with Joins.
NEXT : Create a Scalar Function with Aggregation.



Have another way to solve this solution? Contribute your code (and comments) through Disqus.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.