Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발일기장

MERGE 본문

프로그래밍/MS-SQL

MERGE

규삼 2020. 9. 4. 15:51

MERGE INTO는 특정키에 대한 결과값이 있을때에는 UPDATE

결과값이 없을때에는 INSERT 할 때 사용한다.

 

MERGE INTO #대상테이블 AS A

USING(  #비교할 데이터

       --SELECT 문

) B

ON A.KEY = B.KEY (대상테이블과 비교할데이터의 키값)

 

WHEN MATCHED THEN (대상테이블에 비교할데이터의 키값이 있을 때.. UPDATE문 실행)

UPDATE 문  (이때 UPDATE SET 컬럼 = 값.. 이런식으로 테이블명 생략)

 

WHEN NOT MACHED TEHN (대상테이블에 비교할 데이터의 키값이 없을 때.. INSERT문 실행)

INSERT 문 ( UPDATE문과 마찬가지로 테이블명 생략.. INSERT (컬럼) VALUES (값) ) ;    <--- 세미콜론(;) 필수로 입력

 

 

---------------------------------------------------------------------------------------------------

-- 사용했던 예시(mybatis)

        MERGE INTO INPUT_MATER A
        USING (SELECT #{PRJTCODE} AS PRJTCODE
                          , #{USERNAME} AS USERNAME
                          , #{YMTHDATE} AS YMTHDATE) B
           ON A.PRJTCODE = B.PRJTCODE
          AND A.USERNAME = B.USERNAME 
          AND A.YMTHDATE = B.YMTHDATE


        WHEN NOT MATCHED THEN    -- 일치하는 키값이 없을 때

        INSERT (
               PRJTCODE
             , USERNAME
             , INPTYMTH
             , INPTMNMT
        ) VALUES (
               #{PRJTCODE}   /*프로젝트코드*/
             , #{USERNAME}   /*개발자성명*/
             , #{INPTYMTH}   /*투입년월*/
             , #{INPTMNMT}   /*투입일수*/
        )
        WHEN MATCHED THEN    --일치하는 키값이 있을 때
        UPDATE 
              SET INPTMNMT = #{INPTMNMT} /* 투입일수 */
                  , UPDTUSID = #{UPDTUSID}
                  , UPDTDATE = GETDATE()
       ;

 

 

WHEN MATCHED 와 NOT MATCHED의 순서는 바뀌어도 상관없다.

'프로그래밍 > MS-SQL' 카테고리의 다른 글

특정문자열 기준으로 자르기  (0) 2021.02.15
MS_SQL 기본문법  (0) 2018.06.27
JOIN 참고  (0) 2018.06.21
LEFT OUTER JOIN시에 ON절과 WHERE절에 추가제약조건 넣는규칙  (0) 2018.06.21