반응형
CREATE TRIGGER trg_BackupUserTbl -- 트리거 이름
ON userTbl -- 트리거를 부착할 테이블
AFTER UPDATE,DELETE -- 삭제,수정 후에 작동하도록 지정
AS
DECLARE @modType NCHAR(2) -- 변경 타입
IF (COLUMNS_UPDATED() > 0) -- 업데이트 되었다면
BEGIN
SET @modType = '수정'
END
ELSE -- 삭제되었다면,
BEGIN
SET @modType = '삭제'
END
-- delete 테이블의 내용(변경전의 내용)을 백업테이블에 삽입
INSERT INTO backup_userTbl
SELECT userID, name, birthYear, addr, mobile1, mobile2, -- 데이터
height, @modType, GETDATE(), USER_NAME() FROM deleted -- 삭제된 테이블로부터 select한다
-- FROM deleted 를 삭제하거나 수정하면 임시테이블로간다 backup_userTbl에 간다
--
UPDATE userTbl SET addr = '미이국' WHERE userID = 'JJJ';
DELETE userTbl WHERE height >= 180;
SELECT * FROM backup_userTbl;
SELECT * FROM userTbl;
TRUNCATE TABLE userTbl;
SELECT * FROM backup_userTbl;
-- INSERT INTO SELECT 구문
CREATE TABLE PRODUCT_COPY
(
[PROD_CODE] [char](4) NOT NULL,
[PROD_NAME] [varchar](60) NOT NULL DEFAULT ('')
)
-- 똑같은 파일을 다른 테이블에 옮기고 싶을때 많이쓴다
INSERT INTO PRODUCT_COPY
SELECT * FROM product -- 프로젝트의 자료를 가져와서 INSERT INTO product_copy에 집에넣어라
SELECT * FROM product_copy
DELETE FROM product_copy
INSERT INTO product_copy -- 응용
SELECT prod_code, prod_name FROM product -- 이런씩으로 가져와서 가져오면 편하다
WHERE prod_code = '0003'
백업 트리거
/* -------------------------------
<실습2> p626 ~ p628
---------------------------------*/
USE master ;
RESTORE DATABASE sqlDB FROM DISK ='c:\sqldb.bak' WITH REPLACE ;
USE sqlDB;
DROP TABLE buyTbl; -- 구매테이블은 필요없으므로 삭제.
CREATE TABLE backup_userTbl
( userID nchar(8) ,
name nvarchar(10) ,
birthYear int ,
addr nchar(4) ,
mobile1 nchar(3),
mobile2 nchar(8),
height smallint ,
modType NCHAR(2), -- 변경된 타입. '수정' 또는 '삭제'
modDate datetime, -- 변경된 날짜
modUser nvarchar(256) -- 변경한 사용자
)
CREATE TRIGGER trg_BackupUserTbl -- 트리거 이름
ON userTbl -- 트리거를 부착할 테이블
AFTER UPDATE,DELETE -- 삭제,수정 후에 작동하도록 지정
AS
DECLARE @modType NCHAR(2) -- 변경 타입
IF (COLUMNS_UPDATED() > 0) -- 업데이트 되었다면
BEGIN
SET @modType = '수정'
END
ELSE -- 삭제되었다면,
BEGIN
SET @modType = '삭제'
END
-- delete 테이블의 내용(변경전의 내용)을 백업테이블에 삽입
INSERT INTO backup_userTbl
SELECT userID, name, birthYear, addr, mobile1, mobile2, -- 데이터
height, @modType, GETDATE(), USER_NAME() FROM deleted -- 삭제된 테이블로부터 select한다
-- FROM deleted 를 삭제하거나 수정하면 임시테이블로간다 backup_userTbl에 간다
--
UPDATE userTbl SET addr = '미이국' WHERE userID = 'JJJ';
DELETE userTbl WHERE height >= 180;
SELECT * FROM backup_userTbl;
SELECT * FROM userTbl;
TRUNCATE TABLE userTbl;
INSERT INTO SELECT 사용법 여기
INSERT INTO backup_userTbl
SELECT userID, name, birthYear, addr, mobible1, mobile2,
height, @modType, GETDATE(), USER_NAME() FROM deleted --( inserted)
-- FROM deleted => 원본데이터가 삭제나 수정되면임시로 저장되는곳
'Database > MS-SQL' 카테고리의 다른 글
쿼리 관련 소스 모음 (0) | 2008.10.20 |
---|---|
DB XML 데이터 형식 (0) | 2008.10.20 |
DB 테이블변경 트리거 롭 테이블고 ARTER 테이블 막기 트리거 (0) | 2008.10.20 |
DB 트리거 문장 삽입하고 롤백 하기(저장안되게) (0) | 2008.10.20 |
DB 트리거 (TRIGGER ) DML트리거와 DDL트리거 DCL트리거 (0) | 2008.10.20 |
DB CASE 문을 2개 안쓰고 한개로쓰기 (0) | 2008.10.20 |
DB CASE문 LEFT RIGHT SUBSTRING함수 (0) | 2008.10.17 |
DB 커서 (0) | 2008.10.17 |