sqlserver中MERGE关键字的使用

112 阅读1分钟

MERGE关键字可以用来同步两张表的数据

可以一次完成insert,update,delete的功能

创建测试表

CREATE TABLE [dbo].[MERGE1](

[id] [int] NOT NULL,

[name] nvarchar NULL,

[age] [int] NULL

) ON [PRIMARY]

CREATE TABLE [dbo].[MERGE2](

[id] [int] NOT NULL,

[name] nvarchar NULL

) ON [PRIMARY]

插入测试数据

GO

INSERT [dbo].[MERGE1] ([id], [name], [age]) VALUES (1, N'A1', 20)

GO

INSERT [dbo].[MERGE1] ([id], [name], [age]) VALUES (2, N'B1', 33)

GO

INSERT [dbo].[MERGE1] ([id], [name], [age]) VALUES (3, N'C1', 79)

GO

INSERT [dbo].[MERGE1] ([id], [name], [age]) VALUES (6, N'Z1', 6)

GO

INSERT [dbo].[MERGE2] ([id], [name]) VALUES (1, N'A2')

GO

INSERT [dbo].[MERGE2] ([id], [name]) VALUES (2, N'B2')

GO

INSERT [dbo].[MERGE2] ([id], [name]) VALUES (3, N'C2')

GO

INSERT [dbo].[MERGE2] ([id], [name]) VALUES (4, N'D2')

GO

执行

MERGE INTO MERGE1 m1 目标表

USING MERGE2 m2 源表

ON (m1.id=m2.id) 条件判断

如果存在则更新某个字段

WHEN MATCHED THEN UPDATE SET m1.name=m2.name

如果不存在则把原表数据插入目标表

WHEN NOT MATCHED THEN INSERT VALUES (m2.ID, m2.name,0)

如果目标表存在但是原表不存在则删除目标表数据

WHEN NOT MATCHED BY SOURCE THEN DELETE;