본문 바로가기

연구개발/DBA

MERGE

728x90
반응형
USE jwjung
GO

DROP TABLE T1;
GO

CREATE TABLE T1 (
    제품번호    CHAR(5)    NOT NULL
    ,입고일자    CHAR(8)    NOT NULL
    ,입고수량    INT            NULL
);
GO

ALTER TABLE T1 ADD CONSTRAINT t1_pk PRIMARY KEY (제품번호, 입고일자);
GO

DECLARE @제품번호 CHAR(5), @입고일자 CHAR(8), @입고수량 INT
SET @제품번호 = 'A0001'
SET @입고일자 = CONVERT(CHAR(8), GETDATE(), 112)
SET @입고수량 = 100

UPDATE T1
SET 입고수량 = 입고수량 + @입고수량
WHERE 제품번호 = @제품번호
    AND 입고일자 = @입고일자

IF @@ROWCOUNT = 0
BEGIN
    PRINT '제품번호 ''' + @제품번호 + '''은(는) 입고일자 ''' + @입고일자 + '''에 없음'
    INSERT INTO T1 VALUES (@제품번호, @입고일자, @입고수량)
END
GO

--제품번호 'A0001'은(는) 입고일자 '20120210'에 없음
SELECT * FROM T1;
GO


DECLARE @제품번호 CHAR(5), @입고일자 CHAR(8), @입고수량 INT
SET @제품번호 = 'A0005'
SET @입고일자 = CONVERT(CHAR(8), GETDATE(), 112)
SET @입고수량 = 100

MERGE T1 a
    USING (
        SELECT @제품번호 as 제품번호
                    , @입고일자 as 입고일자
                    , @입고수량 as 입고수량
        FROM T1
        WHERE 제품번호 = 'A0003'
        ) b
    ON a.제품번호 = b.제품번호
    AND a.입고일자 = b.입고일자
    WHEN matched THEN
        UPDATE SET 입고수량 = a.입고수량 + b.입고수량
    WHEN not matched THEN
        INSERT (제품번호, 입고일자, 입고수량)
        VALUES (b.제품번호, b.입고일자, b.입고수량)--;
    OUTPUT $action, inserted.*, deleted.*;
728x90
반응형