Consolidating all the different approaches here.
- Select update
- Update with a common table expression
- Merge
Sample table structure is below and will update from Product_BAK to Product table.
Table Product
CREATE TABLE [dbo].[Product]( [Id] [int] IDENTITY(1, 1) NOT NULL, [Name] [nvarchar](100) NOT NULL, [Description] [nvarchar](100) NULL ) ON [PRIMARY]
Table Product_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. Select update
update P1 set Name = P2.Name from Product P1 inner join Product_Bak P2 on p1.id = P2.id where p1.id = 2
2. Update with a common table expression
; 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
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;
In this Merge statement, we can do insert if not finding a matching record in the target, but exist in the source and please find syntax:
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);