Sql Server 2008 Merge语句更新表

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章