SQLServer中merge函数用法详解

1. 简介

SQL Server中的MERGE函数是一种用于修改目标表数据的强大工具。它可执行合并操作,将源表中的数据合并到目标表中,同时根据匹配条件来更新、删除或插入记录。

2. 语法

MERGE 目标表 AS 目标

USING 源表

ON 匹配条件

WHEN 匹配 THEN 更新

WHEN 不匹配时 THEN 插入

WHEN NOT MATCHED BY SOURCE THEN 删除

OUTPUT 插入、更新或删除的数据 INTO 输出表;

3. 参数说明

3.1 目标表(Destination)

指要执行合并操作的目标表。

3.2 源表(Source)

指要与目标表匹配的源表。

3.3 匹配条件(ON)

指要用作匹配依据的列或表达式。

3.4 更新(WHEN MATCHED THEN)

指在源表和目标表匹配的情况下要更新的列或表达式。

3.5 插入(WHEN NOT MATCHED BY TARGET THEN)

指在源表和目标表不匹配的情况下要插入的列或表达式。

3.6 删除(WHEN NOT MATCHED BY SOURCE THEN)

指在目标表中存在但在源表中不存在的行,要执行的删除操作。

3.7 输出表(OUTPUT INTO)

指用于存储MERGE函数所操作行的输出表。

4. 示例

例如,我们有两个表,一个是目标表(Destination),一个是源表(Source),它们的结构分别如下:

CREATE TABLE Destination

(

Id INT PRIMARY KEY,

Name VARCHAR(50),

Age INT

);

CREATE TABLE Source

(

Id INT PRIMARY KEY,

Name VARCHAR(50),

Age INT

);

现在,我们想要将源表中的数据合并到目标表中,并按照匹配条件(Id)进行更新或插入操作。可以使用以下MERGE函数:

MERGE Destination AS T

USING Source AS S

ON T.Id = S.Id

WHEN MATCHED THEN

UPDATE SET T.Name = S.Name, T.Age = S.Age

WHEN NOT MATCHED BY TARGET THEN

INSERT (Id, Name, Age) VALUES (S.Id, S.Name, S.Age)

WHEN NOT MATCHED BY SOURCE THEN

DELETE

OUTPUT $action, inserted.*, deleted.* INTO OutputTable;

此代码将执行以下操作:

将目标表作为表别名“T”传入MERGE函数中。

将源表作为表别名“S”传入MERGE函数中。

指定匹配条件为两个表的Id列。

在匹配的情况下,根据源表的Name和Age列更新目标表的Name和Age列。

在目标表中不存在源表中的行(即不匹配)时,在目标表中插入源表的Id、Name和Age列。

在源表中不存在目标表中的行时,在目标表删除源表中的行。

将修改的数据以及插入、删除的行输出到OutputTable中。

然后,我们可以对OutputTable进行查询,以查看执行MERGE函数后的结果:

SELECT * FROM OutputTable;

这将返回MERGE函数的执行结果,其中包括以下列:

Action:指执行的操作,可能是UPDATE、INSERT或DELETE。

Id:指在目标表和源表之间匹配的Id列。

Name:指在目标表和源表之间匹配的Name列。

Age:指在目标表和源表之间匹配的Age列。

Id:指插入行的Id值。

Name:指插入行的Name值。

Age:指插入行的Age值。

5. 总结

在本文中,我们了解了SQL Server中MERGE函数的用法。这个功能强大的函数可用于将源表中的数据合并到目标表中,并根据匹配条件来更新、删除或插入记录。无论是需要将大量数据导入到数据库、更新数据库中的数据还是保持常规数据更新,MERGE函数都是非常有用的工具。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签