메뉴 건너뛰기

조회 수 78 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

QLServer 2008 이상이면 MERGE를 사용하여 데이터가 있으면 UPDATE 없으면 INSERT를 할 수 있습니다.

SQLServer 2005에서는 MERGE를 사용할 수 없기 때문에 직접 만들어줘야 합니다.

 

그러면 바로 작성방법을 보도록 하겠습니다.

먼저 테스트용 테이블을 작성하겠습니다.

-- 테스트용 테이블
CREATE TABLE [dbo].[Test](
	[TestID] [bigint] NOT NULL,
	[TestCD] [char](3) NOT NULL,
	[TestName] [nvarchar](10) NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
	[TestID] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF)
)
GO

-- 테스트용 테이터 추가
INSERT INTO Test(TestID, TestCD, TestName) VALUES (10000, '001', 'kim');
INSERT INTO Test(TestID, TestCD, TestName) VALUES (20000, '002', 'lee');

 

추가하려는 레코드가 존재하면 UPDATE, 없으면 INSERT하는 부분을 만들도록 하겠습니다.

-- 있으면 UPDATE, 없으면 INSERT
UPDATE Test 
SET 
	TestCD='001', 
	TestName='park'
WHERE 
	TestID = 10000
AND (TestCD <> '001' OR TestName <> 'park') -- 값이 변경되었을 경우에만 UPDATE
IF @@ROWCOUNT = 0
    INSERT INTO
	Test (TestID, TestCD, TestName)
    SELECT 
	10000, '001', 'park'
    WHERE NOT EXISTS (
	SELECT TOP 1 1 FROM Test WHERE TestID = 10000
)

 

IF @@ROWCOUNT = 0 로 판단하여 UPDATE를 할지 INSERT를 할지 처리하고 있습니다.

WHERE조건과 일치하여 UPDATE가 발생하면 @@ROWCOUNT는 0이 아니기 때문에 INSERT를 하지 않습니다.

WHERE조건과 일치하지 않아 UPDATE가 실행되지 않았다면 @@ROWCOUNT는 0이 되기 때문에 INSERT가 실행됩니다.

 

추가로 UPDATE가 되었는지 INSERT가 되었는지 확인하고 싶은 경우에는 다음과 같이 작성할 수 있습니다.

-- 있으면 UPDATE, 없으면 INSERT
UPDATE 
	Test 
SET 
	TestCD='001', 
	TestName='park'
WHERE 
	TestID = 10000
AND (TestCD <> '001' OR TestName <> 'park')
IF @@ROWCOUNT = 0
    BEGIN
    INSERT INTO 
	Test(TestID, TestCD, TestName)
    SELECT 
	10000, '001', 'park'
    WHERE NOT EXISTS (
        SELECT TOP 1 1 FROM Test WHERE TestID = 10000
    )
    IF @@ROWCOUNT > 0
	SELECT 'inserted'
    ELSE
	SELECT 'no updated'
    END
ELSE
	SELECT 'updated'

 

반환값

inserted - 추가

updated - 갱신

no updated - 데이터는 존재하지만 값변경은 없음.

 

있으면 UPDATE, 없으면 INSERT 양식

/*
    UPDATE 작성 부분
*/
IF @@ROWCOUNT = 0
    BEGIN
/*
    INSERT 작성 부분
*/
    IF @@ROWCOUNT > 0
	SELECT 'inserted'
    ELSE
	SELECT 'no updated'
    END
ELSE
	SELECT 'updated'
 

 


List of Articles
번호 제목 날짜 조회 수
30 MSSQL EXISTS로 서브 쿼리 작성 방법 예제 file 2022.02.16 20
29 MSSQL IN 다중조건 사용 방법 2022.02.16 182
28 MSSQL 테이블 작성 인덱스 생성 하기 file 2022.02.16 53
27 MSSQL CLUSTERED INDEX와 NONCLUSTERED INDEX 차이점 2022.02.16 16
26 MSSQL Primary Key 컬럼 속성 변경 안될때 해결 방법 file 2022.02.16 23
25 MSSQL 컬럼 추가, 변경, 삭제 ALTER 사용 방법 예제 file 2022.02.16 19
24 MSSQL 컬럼 중간에 추가하는 방법 file 2022.02.16 187
23 MSSQL RANK와 DENSE_RANK 랭크 함수 차이 예제 file 2022.02.16 14
22 MSSQL ROW_NUMBER로 성적 순위 설정 방법 예제 file 2022.02.16 9
21 MSSQL 성적 순위 설정 RANK 사용 방법 예제 file 2022.02.14 15
20 MSSQL 간단한 만나이 계산하기 DATEDIFF 사용 예제 file 2022.02.14 266
19 MSSQL 현재 시간 취득하는 여러 가지 방법 file 2022.02.14 14
18 MSSQL NULL값 변환 (NVL, ISNULL, CASE) 사용 방법 예 file 2022.02.14 134
17 MSSQL 공백값과 NULL값 동시에 체크 하는 방법 file 2022.02.14 1015
16 MSSQL 앞에 숫자0 채우기 FORMAT 사용 2022.02.14 86
15 MSSQL 숫자 3자리 콤마 넣기 또는 삭제하기 2022.02.14 57
» MSSQL MERGE사용 안하고 있으면 UPDATE 없으면 INSERT 하기 2022.02.14 78
13 MSSQL MERGE 테이블에 있으면 업데이트 없으면 추가 하기 2022.02.14 10
12 MSSQL 문자열에서 숫자 또는 문자만 추출하기 REPLACE, PATINDEX 2022.02.14 674
11 MSSQL 모든 테이블 사용하고 있는 용량 확인 방법 2022.02.14 35
Board Pagination Prev 1 2 Next
/ 2

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved