SQL Server笔记 -- 第16章:MERGE
从SQL Server 2008开始,可以使用MERGE语句在单个语句中执行插入、更新或删除操作。
MERGE语句允许您将数据源与目标表或视图联接,然后根据该联接的结果对目标执行多个操作。
第16.1节:MERGE用于插入/更新/删除
MERGE INTO targetTable
USING sourceTable ON (targetTable.PKID = sourceTable.PKID)
WHEN MATCHED AND (targetTable.PKID > 100) THEN DELETE
WHEN MATCHED AND (targetTable.PKID <= 100) THEN UPDATE
SET targetTable.ColumnA = sourceTable.ColumnA,
targetTable.ColumnB = sourceTable.ColumnB
WHEN NOT MATCHED THEN
INSERT (ColumnA, ColumnB)
VALUES (sourceTable.ColumnA, sourceTable.ColumnB);
WHEN NOT MATCHED BY SOURCE THEN DELETE ; --< 必需
描述:
MERGE INTO targetTable- 要修改的表USING sourceTable- 数据源(可以是表、视图或表值函数)ON ...- targetTable和sourceTable之间的联接条件。WHEN MATCHED- 找到匹配时要采取的操作AND (targetTable.PKID > 100)- 操作要满足的附加条件THEN DELETE- 从targetTable删除匹配的记录THEN UPDATE- 更新由SET …指定的匹配记录的列
WHEN NOT MATCHED- 在targetTable中未找到匹配时要采取的操作WHEN NOT MATCHED BY SOURCE- 在sourceTable中未找到匹配时要采取的操作
注释:
- 如果不需要特定操作,则省略该条件,例如删除
WHEN NOT MATCHED THEN INSERT将阻止插入记录 - Merge语句需要终止分号。
限制:
WHEN MATCHED不允许INSERT操作- UPDATE操作只能更新一行一次。这意味着联接条件必须产生唯一匹配。









