解讀SQL Server 2008的新語(yǔ)句MERGE_Mssql數(shù)據(jù)庫(kù)教程
推薦:微軟SQL Server 2008之行值構(gòu)造器相信大家都知道怎樣使用數(shù)據(jù)操作語(yǔ)言(DML)對(duì)SQL Server表的數(shù)據(jù)進(jìn)行插入、刪除和更新等處理。有時(shí)候,我們需要用INSERT語(yǔ)句進(jìn)行插入的數(shù)據(jù)實(shí)在是多得讓人頭疼,有很多傳統(tǒng)但繁瑣的方法可以用來
SQL Server 2008將包含用于合并兩個(gè)行集(rowset)數(shù)據(jù)的新句法。根據(jù)一個(gè)源數(shù)據(jù)表對(duì)另一個(gè)數(shù)據(jù)表進(jìn)行確定性的插入、更新和刪除這樣復(fù)雜的操作,運(yùn)用新的MERGE語(yǔ)句,開發(fā)者用一條命令就可以完成。對(duì)兩個(gè)表進(jìn)行信息同步時(shí),有三步操作要進(jìn)行。首先要處理任何需要插入目標(biāo)數(shù)據(jù)表的新行。其次是處理需要更新的已存在的行。最后要?jiǎng)h除不再使用的舊行。這個(gè)過程中需要維護(hù)大量重復(fù)的邏輯,并可能導(dǎo)致微妙的錯(cuò)誤。
Bob Beauchemin討論了MERGE語(yǔ)句,這個(gè)語(yǔ)句將上述的多個(gè)操作步驟合并成單一語(yǔ)句。他給出了如下的例子:
以下是引用片段:
| 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" |
如你所見,具體操作是根據(jù)后面的聯(lián)合(join)的解析結(jié)果來確定的。在這個(gè)例子中,如果目標(biāo)和源數(shù)據(jù)表有匹配的行,就實(shí)行更新操作。如果沒有,就實(shí)行插入或者刪除操作來使目標(biāo)數(shù)據(jù)表和源數(shù)據(jù)表保持一致。
這個(gè)新句法的一個(gè)美妙之處是它在處理更新時(shí)的確定性。在使用標(biāo)準(zhǔn)的UPDATE句法和聯(lián)合時(shí),可能有超過一個(gè)源行跟目標(biāo)行匹配。在這種情況下,無法預(yù)料更新操作會(huì)采用哪個(gè)源行的數(shù)據(jù)。
而當(dāng)使用MERGE句法時(shí),如果存在多處匹配,它會(huì)拋出一個(gè)錯(cuò)誤。這就提醒了開發(fā)者,要達(dá)到預(yù)想的目標(biāo),當(dāng)前的聯(lián)合條件還不夠明確。
分享:Sql語(yǔ)句密碼驗(yàn)證的安全漏洞Sql語(yǔ)句作為國(guó)際標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)查詢語(yǔ)句,在各種編程環(huán)境中得到了廣泛的應(yīng)用。作為一個(gè)成熟、穩(wěn)定的系統(tǒng),用戶登陸和密碼驗(yàn)證是必不可少的。 Sql語(yǔ)句作為國(guó)際標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)查詢語(yǔ)句,在
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫(kù),提示 無法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟
- 也談如何縮小SQL SERVER日志文件
- 解析用SQL Server處理物料清單規(guī)則
- Sql學(xué)習(xí)第二天——SQL DML與CTE概述
- SQL Server COALESCE()函數(shù)的創(chuàng)新應(yīng)用
- 詳解數(shù)據(jù)庫(kù)導(dǎo)出成excel的sql語(yǔ)句
- 如何使SQL Server 2000中生成XML
- SQL2000 事務(wù)回滾問題探討
- sqlserver2005自動(dòng)創(chuàng)建數(shù)據(jù)表和自動(dòng)添加某個(gè)字段索引
- 解讀SQL Server的BUILTIN\Administrators用戶
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫(kù)教程-解讀SQL Server 2008的新語(yǔ)句MERGE
。