程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 解析SQL Server 2008中的新語句:MERGE

解析SQL Server 2008中的新語句:MERGE

編輯:關於SqlServer

  Microsoft SQL Server 2008將包含用於合並兩個行集(rowset)數據的新句法。根據一個源數據表對另一個數據表進行確定性的插入、更新和刪除這樣復雜的操作,運用新的MERGE語句,開發者只需使用一條命令就可以完成。

  在對兩個表進行信息同步時,有三步操作必須要進行。首先我們要處理任何需要插入目標數據表的新行。其次是處理需要更新的已存在的行。最後要刪除不再使用的舊行。這個過程中需要維護大量重復的邏輯,並可能導致微妙的錯誤。

  值得我們大家主意的是,Bob Beauchemin討論了MERGE語句,這個語句將上述的多個操作步驟合並成單一語句。以下是他給出的示例:

  以下是引用的片斷:

merge [target] t

using [source] s on t.id = s.id

when matched then update t.name = s.name, t.age = s.age -- use "rowset1"

when not matched then insert values(id,name,age) -- use "rowset2"

when source not matched then delete; -- use "rowset3"

  大家可以看到,具體的操作是根據後面的聯合(join)的解析結果來確定的。在這個示例中,假如目標和源數據表有匹配的行,就實行更新操作。如果沒有,就實行插入或者刪除操作來使目標數據表和源數據表保持一致。

  這個新句法的一個精妙之處是它在處理更新時的確定性。在使用標准的UPDATE句法和聯合時,可能有超過一個源行跟目標行匹配。在此情況下,無法預料更新操作會采用哪個源行的數據。

  而我們在使用MERGE句法時,假如存在多處匹配,它會拋出一個錯誤。這就需要開發者主意,要達到預想的目標,當前的聯合條件還不夠十分明確。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved