JUST DO IT
[MSSQL] 트리거(TRIGGER) 사용법 본문
1. TRIGGER란?
TRIGGER는 데이터베이스에서 특정 이벤트(예: INSERT, UPDATE, DELETE)가 발생했을 때 자동으로 실행되는 저장 프로시저입니다. 데이터 무결성을 유지하거나 특정 작업을 자동화하는 데 사용됩니다.
* TRIGGER의 특징 *
- 특정 테이블의 데이터 변경 이벤트에 반응.
- INSERT, UPDATE, DELETE 작업 전이나 후에 실행.
- 자동으로 실행되며, 명시적으로 호출할 수 없음.
2. TRIGGER의 유형
(1) AFTER TRIGGER
: 테이블에서 이벤트가 성공적으로 완료된 후 실행.
주로 데이터 검증, 이력 기록 등에 사용.
(2) INSTEAD OF TRIGGER
: 이벤트 발생 시, 기본 작업 대신 트리거에 정의된 작업을 실행.
주로 복잡한 데이터 검증이나 논리 작업을 처리하는 데 사용.
3. Trigger 활용
(1) 우선 예제로 활용할 테이블을 만들어줍니다
CREATE TABLE Employees (
EmployeeID INT IDENTITY PRIMARY KEY,
EmployeeName NVARCHAR(100) NOT NULL,
Position NVARCHAR(50),
Salary INT
);
CREATE TABLE AuditLog (
LogID INT IDENTITY PRIMARY KEY,
Action NVARCHAR(50),
EmployeeID INT,
ActionDate DATETIME DEFAULT GETDATE()
);
(2) AFTER INSERT 트리거 예제(테이블에 데이터가 삽입될때 기록)
CREATE TRIGGER trg_AfterInsert_Employees
ON Employees
AFTER INSERT
AS
BEGIN
INSERT INTO AuditLog (Action, EmployeeID)
SELECT 'INSERT', EmployeeID
FROM INSERTED;
END;
(3) 데이터 삽입과 트리거 실행 확인
INSERT INTO Employees (EmployeeName, Position, Salary)
VALUES ('홍길동', '개발자', 50000);
SELECT * FROM AuditLog;
(4) INSTEAD OF TRIGGER 예제 (Salary 급여가 0보다 작은값이 들어가지 않도록하는 트리거)
CREATE TRIGGER trg_InsteadOfInsert_Employees
ON Employees
INSTEAD OF INSERT
AS
BEGIN
-- 급여가 0 이상인 경우에만 삽입
INSERT INTO Employees (EmployeeName, Position, Salary)
SELECT EmployeeName, Position, Salary
FROM INSERTED
WHERE Salary >= 0;
IF EXISTS (SELECT * FROM INSERTED WHERE Salary < 0)
BEGIN
PRINT '급여는 0보다 작을 수 없습니다.';
END;
END;
(5) 비정상적인 급여(0보다 작은)를 삽입하는 경우 트리거에 의해 아래와 같이 실행됩니다.
-- 비정상 데이터 삽입 (Salary가 0보다 작음)
INSERT INTO Employees (EmployeeName, Position, Salary)
VALUES ('박영희', '디자이너', -1000);
4. TRIGGER 확인과 삭제 ( ※TRIGGER는 수정이 안됩니다※ )
-- TRIGGER 확인
SELECT * FROM SYS.TRIGGERS;
-- TRIGGER 삭제
DROP TRIGGER 트리거 이름;
이렇게 MSSQL TRIGGER에대해 알아보았습니다.
'DATABASE > MSSQL' 카테고리의 다른 글
MSSQL 샘플 DB 설치하기(AdventureWorks) (3) | 2024.11.14 |
---|---|
MSSQL VIEW 생성 쿼리 사용방법 (2) | 2024.11.13 |
mssql 다이어그램 생성오류 해결법(권한없음 시) (0) | 2024.11.11 |
MSSQL Server Management Studio(SSMS) 쿼리창 줄번호 표시 (0) | 2024.11.07 |