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

 

 

 

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