♣ Tech & Biz Salon/Tech

SQLSERVER (2008) Merge Statement

TasteGod 2012. 10. 24. 17:48

The MERGE Statement in SQL Server 2008
http://www.simple-talk.com/sql/learn-sql-server/the-merge-statement-in-sql-server-2008/


상기 링크 참고해서 짜봤는데 잘 되네요.
매핑테이블에 INSERT 하는것이 주 목적인 구문입니다.


MERGE T_SFST_ITEM_MAPP M

USING (

SELECT 'E1200003' AS SFST_DOCU_ID, ITEM_CD, MAX(ITEM_HIST_SEQ) AS ITEM_HIST_SEQ

FROM T_ITEM_HIST

WHERE ITEM_CD IN ('E00000011','E00000012','E00000013')

GROUP BY ITEM_CD

) N

ON M.SFST_DOCU_ID = N.SFST_DOCU_ID AND M.ITEM_CD = N.ITEM_CD

WHEN MATCHED AND M.ITEM_HIST_SEQ != N.ITEM_HIST_SEQ THEN

UPDATE 

SET M.ITEM_HIST_SEQ = N.ITEM_HIST_SEQ

,M.INS_USERID = 'HONGGILDONG'

,M.INS_DATE = GETDATE()

WHEN NOT MATCHED BY TARGET THEN

INSERT (SFST_DOCU_ID, ITEM_CD, ITEM_HIST_SEQ, INS_USERID, INS_DATE)

VALUES (N.SFST_DOCU_ID, N.ITEM_CD, N.ITEM_HIST_SEQ, 'HONGGILDONG', GETDATE());


참고로 mybatis 의 update 로 썼고 ( insert 로 해야할지 update 로 해야할지 mybatis 사이트 가봐도 잘 못찾겠음 )
리턴값은 
- Insert 의 경우 작업한 rows 가 리턴됩니다.
- Update 는 해당 경우를 테스트 안해봐서 모르겠네요. ( 쿼리로는 해봤고, mybatis 상에선 못해봄 )