Sql Server 2008 Merge语句更新表

本文介绍了SQL中的Merge语句,探讨了其如何简化复杂的连接查询,减少表或索引扫描次数。文章强调了Merge语句的一些限制,比如目标表中不允许出现重复数据且一次更新只能发生一次。此外,还提供了具体的使用示例,并讨论了如何通过创建适当的索引来优化Merge语句。

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

merge语句的好处是把两次连接查询合并到了一起,sql变得简单,减少了对表或索引的扫描(是这样么?)

坏处,不能最小日志记录

要merge的目标表不允许一条数据被更新多次,也就是 1,原表不能包含条件重复的数据,2,只能有一个update

MATCHED的条件下可以进行更新或者删除操作

Not Matched的条件下可以插入操作

 

可以把CTE和Merge一起使用,CTE来排重

 ;WITH tmp AS (  
SELECT *, ROW_NUMBER() OVER(PARTITION BY [Name] ORDER BY Id) AS rowNum  							
FROM   Table1   )  
MERGE   Table2   AS TGT  
USING (SELECT * FROM tmp WHERE rowNum = 1) AS SRC  
ON TGT.[Name] = SRC.[Name]  	
WHEN MATCHED AND TGT.Date <   SRC.Date  
THEN UPDATE SET  											
TGT.Value = SRC.Value  
WHEN NOT MATCHED THEN INSERT ([Name], Value)  
VALUES(SRC.[Name], SRC.Value);


merge语句在msdn有详细解释:http://technet.microsoft.com/en-us/library/bb510625.aspx

Merge语句索引的优化,和表连接索引的优化一样

1,创建源表Join列的唯一和覆盖索引

2,创建目标表的唯一聚集索引

详细信息:http://technet.microsoft.com/en-us/library/cc879317.aspx

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值