日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SybaseASEV15.7新版本支持MERGE語句

2011年9月,Sybase公司將發(fā)布ASE的下一個版本V15.7。即將推出的ASE V15.7中增加了很多的新特性。本文我們只介紹一下MERGE特性的使用,希望能夠對您有所幫助。

站在用戶的角度思考問題,與客戶深入溝通,找到上林網(wǎng)站設計與上林網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋上林地區(qū)。

ANSI- SQL2003標準中***提到了MERGE這個命令,簡單理解為:”向目標表中插入不存在的記錄,更新已經(jīng)存在的數(shù)據(jù)“。其它數(shù)據(jù)庫管理系統(tǒng),比如 Oracle在9i中就引入了MERGE命令,Sybase SQL Anywhere中也有該命令。迄今為止,Sybase ASE中只能使用類似的if update else insert的方法來實現(xiàn)MERGE的功能。

下面是一個使用MERGE的例子。表Customers中存儲客戶信息,每周需要將表Cust_updates_week_10中的數(shù)據(jù)更新到客戶表Customers中。為了簡化起見,本例子只更新address和number這2個字段。

 
 
 
  1. merge into Customers as c                                      
  2. using Cust_updates_week_10 as u                                
  3. on c.CustID = u.CustID                                         
  4. when not matched then                                          
  5. insert (CustID,Addr,Phone) values(u.CustID,u.Addr,u.Phone)
  6. when matched then                                              
  7. update set Addr=u.Addr, Phone=u.Phone  

讓我們來分析一下上面的這個SQL語句。

第1行merge into Customers as c表示Customers為目的表。

第2行using Cust_updates_week_10 as u表示Cust_updates_week_10為源數(shù)據(jù)表,被插入或更新的內(nèi)容將來源于此表。

第3行指定數(shù)據(jù)行是否存在的條件,本例子為演示起見,僅指定了一個條件。on c.CustID = u.CustID將使得ASE語法解釋器對Customers和Cust_updates_week_10做左外連接處理。

第4-5行表示Cust_updates_week_10包含的并且在Customers中不存在的數(shù)據(jù),也就是“新客戶”數(shù)據(jù),將被插入到表Customers中。

第6行表示兩張表中的記錄匹配時,“非鍵”列可以被更新。本例子僅更新address和phone兩個字段。

我們可以拓展MERGE命令的語法,比如:可以使用多個“當存在時”、“當不存在時”這樣的語句。下面的例子將使用兩個“when matched”語句,***個“when matched”語句判斷存在的記錄中address字段是否為空,當address為空,記錄將被刪除。

 
 
 
  1. merge into Customers as c
  2. using Cust_updates_week_10 as u
  3. on c.CustID = u.CustID
  4. when not matched then
  5. insert (CustID,Addr,Phone) values(u.CustID,u.Addr,u.Phone)
  6. when matched and u.Addr = NULL then
  7. delete
  8. when matched then
  9. update set Addr=u.Addr, Phone=u.Phone

注意:語句“when matched”和“when not matched”的順序會影響處理的結果。上面的SQL語句中,***條語句的條件被完全滿足時,后面的類似“when [not] matched”語句就不會被執(zhí)行了。

MERGE 命令比較實用的地方在于它將比較復雜的多條語句集成到單條SQL語句中。不僅僅使得SQL語句更加簡潔、清晰,還能顯著得提高執(zhí)行效率。使用MERGE命 令僅需訪問一次源數(shù)據(jù)表的內(nèi)容,然后直接處理匹配的每條記錄。如果你使用單獨的insert、update、delete語句來實現(xiàn)類似的功能時,那么將 至少訪問三次源數(shù)據(jù)表的內(nèi)容。

MERGE命令比較靈活些,除了使用基表外,還可以使用派生表。

 
 
 
  1. merge into Customers as c
  2. using (select CustID, Addr, Phone from Cust_updates_week_10
  3. where Phone is not NULL) as u
  4. on c.CustID = u.CustID
  5. when not matched then
  6. insert (CustID,Addr,Phone) values(u.CustID,u.Addr,u.Phone
  7. when matched then
  8. update set Addr=u.Addr, Phone=u.Phone

MERGE命令有一些限制條件,比如上面的SQL語句中,第3行中的鍵列(CustID)不能被更新。當然,還有其它的一些限制。讓我們期待ASE V15.7版本的發(fā)布。

關于Sybase ASE V15.7的相關知識就介紹這么多了,希望本次的介紹能夠對您有所幫助。


當前文章:SybaseASEV15.7新版本支持MERGE語句
文章來源:http://www.dlmjj.cn/article/cdhdspo.html