Search

2016년 1월 12일 화요일

[Database] [MSSQL] 트리거로 다른 테이블 업데이트 하기. (변경된 사항만)

* 예를 들어, Item 테이블과, Sales 라는 테이블이 있다고 가정하자.
* Item 테이블은 Group_Code와 Item_Code로 이루어져있고, Sales에서는 Item테이블의 두 컬럼에 대한 정보를 모두 가지고 있다. (단, Item테이블의 Item_Code는 PK이다.)

* 어느 날, Item테이블의 Item_Code(10001) 상품의 Group_Code를 AAA에서 BBB로 변경해야만 했다. 그러면, Sales라는 테이블의 Item_Code 컬럼에서 기존에 AAA라는 값을 가진 모든 항목을 BBB로 변경하는 UPDATE문을 작성해야 한다.

-- 예를 들자면, 
UPDATE Sales SET Group_Code = 'BBB' WHERE Item_Code = '10001'

* 하지만, Group_Code가 빈번하게 변경 된다면? 혹은, Item 테이블의 Group_Code 변경 시점에 Sales테이블에도 항상 자동으로 변경 사항이 반영되어야만 한다면?
* 이런 상황에서는 다음과 같은 트리거를 사용해 해결할 수 있다.

CREATE TRIGGER tr_updateGroupCode
ON Item_Table

/* 내용 : 아이템의 그룹코드가 변경되면, 판매(Sales)테이블의 그룹 코드도 변경 */

AFTER INSERT, UPDATE
AS
  BEGIN
      UPDATE Sales_Table
      SET
            Group_Code = Item_Table.Group_Code
      FROM Item_Table
      WHERE
Item_Table.Item_Code = Sales_Table.Item_Code
and Item_Table.Item_Code IN (SELECT DISTINCT Item_Code FROM Inserted)
  END



댓글 없음:

댓글 쓰기