SQLSERVER2008 新功能 MERGE

本文介绍如何使用MERGE语句在一个步骤中执行插入、更新或删除操作,通过示例展示如何同步两个表的数据,当记录存在时进行更新,不存在时插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 可以使用 MERGE 语句在一条语句中执行插入、更新或删除操作。MERGE 语句允许您将数据源与目标表或视图联接,然后根据该联接的结果对目标对象执行多项操作。

 

MERGE 语法包括五个主要子句:

MERGE 子句用于指定作为插入、更新或删除操作目标的表或视图。
USING 子句用于指定要与目标联接的数据源。
ON 子句用于指定决定目标与源的匹配位置的联接条件。
WHEN 子句用于根据 ON 子句的结果指定要执行的操作。
OUTPUT 子句针对更新、插入或删除的目标对象中的每一行返回一行。--可以省略

MERGE 语句必须以 ; 结束。

---案例(同步两个表的数据。即 存在则更新,否则插入数据)


declare @T TABLE (
    ProductID int, CustomerID int, CreateDate datetime);

INSERT INTO @T VALUES(101, 20120213, '20120213'),
(102, 20120213, '20120213'),(103, 20120214, '20120213');

DECLARE @TT TABLE (
    ProductID int, CustomerID int, CreateDate datetime);
INSERT INTO @TT VALUES(101, 20120213, '20120213'),(109, 20120218, '20120213');;


MERGE @TT AS Target
USING (SELECT CustomerID, ProductID, CreateDate FROM @T) AS Source
ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID)
WHEN MATCHED THEN --如果两表存在相同的记录,则更新@@TT中对应记录的日期为 @T中的日期
    UPDATE SET Target.CreateDate = Source.CreateDate
WHEN NOT MATCHED BY TARGET THEN --将存在于@T中但不存在于@@TT中的数据插入到@@TT中
    INSERT (CustomerID, ProductID, CreateDate)
    VALUES (Source.CustomerID, Source.ProductID, Source.CreateDate)
WHEN NOT MATCHED BY SOURCE THEN---将存在于@@TT中但不存在于@T表中的数据删除
 DELETE;

select * from @TT


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值