반응형
MSSQL 데이터베이스에 특정 Rows를 Update 하거나 Insert를 쉽게 하는 방법으로 MERGE 사용합니다.
아래의 TB_USER 테이블에 ID가 'aaa'이고, Name이 'Name#1' 데이터를 넣고자 하는데,
동일 아이디가 있으면 UPDATE하고, 없으면 INSERT를 하려고 한다.
프로그램에서 구현하려면 INSERT 쿼리를 수행해서 오류(PK 중복 Exception)가 발생하면 UPDATE를 해야 한다.
C# 또는 Java로 프로그래밍하면 try catch를 이용 할 수 있다.
try
{
// Insert 쿼리 수행
// PK로 인해 Exception이 발생
}
catch
{
// Insert 쿼리 수행
}
하지만 아래와 같이 MERGE 쿼리를 수행하면 더욱 쉽게 구현이 가능하다.
쿼리를 수행하면 Insert/Update/Delete 결과도 쉽게 확인 할 수 있다.
MERGE TB_USER AS T
USING
(
SELECT 'aaa' AS ID, 'Name#1' AS NAME
UNION ALL
SELECT 'bbb' AS ID, 'Name#2' AS NAME
) AS S
ON (T.ID = S.ID)
WHEN MATCHED THEN
UPDATE SET T.ID = S.ID,
T.NAME = S.NAME
WHEN NOT MATCHED THEN
INSERT (ID, NAME)
VALUES (S.ID, S.NAME)
OUTPUT $action, Inserted.*;
[쿼리 결과]
위의 쿼리를 수행하면 아래와 같이 결과가 표시된다.
반응형
'데이터베이스 > MSSQL' 카테고리의 다른 글
MSSQL에서 Openquery를 사용하지 않고 Linked Server에 쿼리 수행하기 (0) | 2017.12.28 |
---|---|
MS-SQL 반올림, 올림, 내림. (0) | 2017.11.14 |
MSSQL 로그인 오류 18456 해결 방법 (0) | 2017.03.05 |
MS-SQL DB Suspect 해결법 (1) | 2016.11.11 |
MS-SQL 날짜 컬럼 Between (0) | 2016.11.11 |
댓글