모든 다른 접근 방식을 통합합니다.
- 업데이트 선택
- 공통 테이블 표현식으로 업데이트
- 병합
샘플 테이블 구조는 다음과 같으며 Product_BAK에서 Product 테이블로 업데이트됩니다.
생성물
CREATE TABLE [dbo].[Product](
[Id] [int] IDENTITY(1, 1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[Description] [nvarchar](100) NULL
) ON [PRIMARY]
제품 _BAK
CREATE TABLE [dbo].[Product_BAK](
[Id] [int] IDENTITY(1, 1) NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[Description] [nvarchar](100) NULL
) ON [PRIMARY]
1. 업데이트 선택
update P1
set Name = P2.Name
from Product P1
inner join Product_Bak P2 on p1.id = P2.id
where p1.id = 2
2. 공통 테이블 표현식으로 업데이트
; With CTE as
(
select id, name from Product_Bak where id = 2
)
update P
set Name = P2.name
from product P inner join CTE P2 on P.id = P2.id
where P2.id = 2
3. 병합
Merge into product P1
using Product_Bak P2 on P1.id = P2.id
when matched then
update set p1.[description] = p2.[description], p1.name = P2.Name;
이 Merge 문에서 대상에서 일치하는 레코드를 찾지 못하더라도 소스에 존재하고 구문을 찾으면 삽입 할 수 있습니다.
Merge into product P1
using Product_Bak P2 on P1.id = P2.id;
when matched then
update set p1.[description] = p2.[description], p1.name = P2.Name;
WHEN NOT MATCHED THEN
insert (name, description)
values(p2.name, P2.description);
SET Table.other_table_id = @NewValue
) 사이의 링크를 편집하는 경우 ON 문을 다음과 같이 변경하십시오.ON Table.id = @IdToEdit AND other_table.id = @NewValue