MY MEMO
[SQL SERVER] Trigger 본문
(실무에서는 거의 사용하지 않음)
Trigger : 방아쇠라는 뜻으로 테이블에 무슨 일이 일어나면 자동으로 실행 -> 삽입 수정 삭제 등을 실행
ex) 테이블에 행을 고의 또는 실수로 삭제한다면 테이블에 행이 삭제되는 순간에 행의 내용/시간/삭제/사용자를 기록
1) AFTER TRIGGER
: INSERT, UPDATE, DELETE 등의 작업이 일어났을 때 작동하는 트리거
+) deleted 라는 table이 system에 존재 -> 삭제되는 모든 내용이 있음 & inserted : insert 했을 모든 데이터가 입력되어있음
INSERT가 실행 : inserted 테이블에 삽입
UPDATE가 실행 : 원래의 데이터 -> inserted / 삭제된 데이터 -> deleted
CREATE TRIGGER trg_insertUserTbl
ON userTbl
AFTER INSERT
AS
RAISEERROR(N'데이터의 입력 시도',10,1);
ROLLBACK TRAN;
: 데이터를 삽입하면 안되는데 삽입을 시도했을 때
CREATE TRIGGER testTrg
ON testTbl
AFTER DELETE, UPDATE
AS
INSERT INTO backup_userTbl
SELECT * FROM deleted;
: Trigger를 생성
2) INSTEAD OF TRIGGER
: 이벤트가 발생하기 전에 작동 / 뷰에도 작동 -> View Update 기능 / INSERT, UPDATE, DELETE 대신에 INSTEAD OF 트리거가 작동
복합뷰에서는 INSERT, DELETE, UPDATE가 작동하지 않는다
하지만 INSTEAD OF TRIGGER를 만들어서 고객을 입력하면 자동으로 View에 INSERT되게 만들 수 있다.
INSERT INTO uv_deliver VALUES ('JBI,N'이름',N'구두',50,1,N'인천');
GO
CREATE TRIGGER trg_insert
ON uv_deliver
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO usrTbl(userid, name, addr)
SELECT userid,name,addr FROM inserted;
INSERT INTO buyTbl(userid, name, price)
SELECT userid, name, price FROM inserted;
END;
: 복합뷰와 Trigger를 이용하여 insert, update, delete를 만들기
EXEC sp_helptrigger uv_deliver;
: trigger의 정보를 확인할 수 있음
EXEC sp_helptext trig_insert;
: trigger에 입력되는 내용들을 text로 보여줌
EXEC sp_rename 'dbo.trg_insert', 'dbo.gri_uvInsert';
: trigger의 이름 바꾸기
But 이름이 바뀌긴 하지만 실제로 카탈로그에는 바뀌어 있지 않다 => 쓰지 맙시다
ex) SELECT * FROM sys.sql_modules; // 를 실행하면 볼 수 있다!
+) table이나 view를 삭제하면 거기에 부착된 trigger가 함께 삭제된다
1) 다중 트리거
: 하나의 테이블에 동일한 트리거가 여러개 부착
2) 중첩 트리거
: 한 트리거가 또 다른 트리거를 작동시키는 것
3) 재귀 트리거
: 트리거가 작동해서 다시 자신의 트리거를 작동시키는 것
=> RECURSIVE_TRIGGERS
+) 트리거는 작동 순서를 지정할 수는 없지만 처음과 끝은 가능하다
sp_settriggerorder @triggername = 'dbo.trgA', @order='First(or LAST)',@stmttype='INSERT';
'STUDYING > SQL SERVER' 카테고리의 다른 글
[SQL SERVER] SQL Server와 응용프로그램의 연결 (0) | 2018.03.19 |
---|---|
[SQL SERVER] 전체 텍스트 검색 & XML (0) | 2018.03.19 |
[SQL SERVER] Cursor (0) | 2018.03.19 |
[SQL SERVER] 저장 프로시저와 사용자 정의 함수 (0) | 2018.03.16 |
[SQL SERVER] Transaction (0) | 2018.03.16 |