CS/database
[database] SQL Triggers
꽁이꽁설꽁돌
2025. 6. 23. 10:24
728x90
반응형
create trigger salary_nodecrease
on instructor
after update
as
begin
set nocount on;
if exists (
select 1
from inserted i
inner join deleted d on i.instructor_id = d.instructor_id
where i.salary < d.salary
)
begin
declare @instructor_id varchar(5);
select top 1 @instructor_id = i.instructor_id
from inserted i
inner join deleted d on i.instructor_id = d.instructor_id
where i.salary < d.salary;
raiserror('Salary decrease not allowed for instructors %s', 16, 1, @instructor_id);
rollback transaction;
return;
end
end
---이 트리거는 **instructor 테이블의 salary(급여) 필드를 감시하여
---급여가 줄어드는(update로 인한 감소) 것을 차단하는 역할을 합니다.
CREATE TRIGGER check_classroom_capacity
ON classroom
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
-- 용량 초과 시 오류 발생 및 롤백
IF EXISTS (SELECT 1 FROM inserted WHERE capacity > 200)
BEGIN
RAISERROR('classroom capacity cannot be more than 200', 16, 1);
ROLLBACK TRANSACTION;
RETURN;
END;
-- 용량 조건을 통과한 경우에만 삽입
INSERT INTO classroom(building, room_number, capacity)
SELECT building, room_number, capacity
FROM inserted
WHERE capacity <= 200;
END;
반응형