ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB 트리거 백업트리고 사용법 INSERT INTO SELECT 설명
    Database/MS-SQL 2008. 10. 20. 11:34
    반응형






    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 => 원본데이터가 삭제나 수정되면임시로 저장되는곳














    반응형

    댓글

Designed by Tistory.