SQL Server 2008中的新語句:MERGE
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句法時,假如存在多處匹配,它會丟擲一個錯誤。這就需要開發者主意,要達到預想的目標,當前的聯合條件還不夠十分明確。
在對兩個表進行資訊同步時,有三步操作必須要進行。首先我們要處理任何需要插入目標資料表的新行。其次是處理需要更新的已存在的行。最後要刪除不再使用的舊行。這個過程中需要維護大量重複的邏輯,並可能導致微妙的錯誤。
值得我們大家主意的是,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句法時,假如存在多處匹配,它會丟擲一個錯誤。這就需要開發者主意,要達到預想的目標,當前的聯合條件還不夠十分明確。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-515896/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL Server 查詢歷史執行的SQL語句SQLServer
- SQL Server 語句日期格式查詢方法SQLServer
- SQL Server-簡單查詢語句SQLServer
- Sql Server 資料庫獲取字串中小寫字母的SQL語句SQLServer資料庫字串
- SQL 高階語法 MERGE INTOSQL
- Java中如何解析SQL語句、格式化SQL語句、生成SQL語句?JavaSQL
- SQL語句SQL
- SQL語句IN的用法SQL
- SQL Server 資料庫部分常用語句小結(二)SQLServer資料庫
- SQL server資料庫表碎片比例查詢語句SQLServer資料庫
- SQL Server 資料庫部分常用語句小結(一)SQLServer資料庫
- SQL Server的Merge —— 一步實現 insert,update,deleteSQLServerdelete
- 【SQL】9 SQL INSERT INTO 語句SQL
- 【SQL】10 SQL UPDATE 語句SQL
- 【SQL】11 SQL DELETE 語句SQLdelete
- SQL SELECT 語句SQL
- sql常用語句SQL
- Sqlserver的merge into或delete語句堵塞select語句,鎖型別是LCK_M_ISSQLServerdelete型別
- SQL Server 2008中Analysis Services的新特性——深入SQL Server 2008SQLServer
- sql語句如何執行的SQL
- MySQL中常用的SQL語句MySql
- sqlserver dba常用的sql語句SQLServer
- SQL 語句的注意事項SQL
- sql宣告變數,及if -else語句、while語句的用法SQL變數While
- sql merge intoSQL
- 1.3. SQL 語句SQL
- Oracle基本SQL語句OracleSQL
- Sql語句小整理SQL
- SQL語句優化SQL優化
- SQL 語句學習SQL
- 資料庫常用的sql語句大全--sql資料庫SQL
- 簡單練習Microsoft SQL Server MERGE同步兩個表ROSSQLServer
- SQL Server郵件相關SQL語句出現嚴重的ASYNC_NETWORK_IO等待事件案例SQLServer事件
- Oracle SQL精妙SQL語句講解OracleSQL
- 單個SQL語句的10046 traceSQL
- mysql的sql語句執行流程MySql
- SQL語句規範的寫法SQL
- 簡單的SQL語句學習SQL
- SQL 語句的執行順序SQL