MSSQL에서 트리거(Trigger) 작성법

트리거는 데이터베이스 테이블에 대한 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 저장 프로시저입니다. 트리거는 데이터 무결성을 유지하고, 자동화된 데이터 검증 및 로깅 등에 유용하게 사용됩니다. 이번 글에서는 MSSQL에서 트리거를 작성하는 방법과 사용 예제를 소개하겠습니다.

 

트리거의 기본 구조

MSSQL에서 트리거는 다음과 같은 기본 구조를 가집니다:

AFTER와 INSTEAD OF 트리거

  • AFTER 트리거: 지정된 이벤트가 발생한 후에 실행됩니다.
  • INSTEAD OF 트리거: 지정된 이벤트 대신 실행됩니다.

 

트리거 작성 예제

INSERT 트리거

새로운 레코드가 삽입될 때 로그 테이블에 기록하는 트리거 예제입니다.

CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    DECLARE @empId INT, @empName NVARCHAR(100);

    SELECT @empId = INSERTED.EmpID, @empName = INSERTED.EmpName
    FROM INSERTED;

    INSERT INTO EmployeeLog (EmpID, EmpName, LogDate)
    VALUES (@empId, @empName, GETDATE());
END

 

UPDATE 트리거

기존 레코드가 업데이트될 때 변경 전후 값을 로그에 기록하는 트리거 예제입니다.

CREATE TRIGGER trgAfterUpdate
ON Employees
AFTER UPDATE
AS
BEGIN
    DECLARE @oldName NVARCHAR(100), @newName NVARCHAR(100);

    SELECT @oldName = DELETED.EmpName, @newName = INSERTED.EmpName
    FROM DELETED, INSERTED;

    INSERT INTO EmployeeLog (OldValue, NewValue, LogDate)
    VALUES (@oldName, @newName, GETDATE());
END

 

DELETE 트리거

레코드가 삭제될 때 해당 레코드를 다른 테이블로 백업하는 트리거 예제입니다.

CREATE TRIGGER trgAfterDelete
ON Employees
AFTER DELETE
AS
BEGIN
    INSERT INTO DeletedEmployees (EmpID, EmpName, DeletedDate)
    SELECT EmpID, EmpName, GETDATE()
    FROM DELETED;
END

 

트리거 관리

트리거를 생성한 후에는 필요에 따라 수정하거나 삭제할 수 있습니다.

 

트리거 수정

트리거를 수정할 때는 기존 트리거를 삭제하고 다시 생성해야 합니다.

DROP TRIGGER trgAfterInsert;
GO

CREATE TRIGGER trgAfterInsert
ON Employees
AFTER INSERT
AS
BEGIN
    -- 수정된 트리거 내용
END

 

트리거 삭제

트리거를 삭제하려면 DROP TRIGGER 명령을 사용합니다.

DROP TRIGGER trgAfterInsert;

 

결론

트리거는 데이터베이스의 자동화된 작업을 구현하는 데 매우 유용한 도구입니다. 적절한 트리거를 사용하면 데이터 무결성을 유지하고, 복잡한 데이터 검증 및 로깅 작업을 자동화할 수 있습니다. 이번 글에서는 MSSQL에서 트리거를 작성하고 관리하는 기본적인 방법과 몇 가지 예제를 살펴보았습니다. 실습을 통해 트리거의 활용도를 높여보시기 바랍니다.