成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解SQL Server 2008中的MERGE語句

數據庫 SQL Server
本文將重點討論的是SQL Server 2008中的MERGE語句,其主要功能是根據源表對目標表執行插入、更新或刪除操作。

SQL Server 2008中的MERGE語句能做很多事情,它的功能是根據源表對目標表執行插入、更新或刪除操作。最典型的應用就是進行兩個表的同步。

下面通過一個簡單示例來演示MERGE語句的使用方法,假設數據庫中有兩個表Product及ProductNew,我們的任務是將Product的數據同步到ProductNew(當然同步可能是每天通過Job來自動完成的,在此我們只關注MERGE的使用)。

以下SQL創建示例表

--源表

  1. CREATE TABLE Product   
  2. (   
  3.     ProductID    varchar(7) NOT NULL PRIMARY KEY,   
  4.     ProductName varchar(100) NOT NULL,   
  5.     Price        decimal(13,2) DEFAULT 0   
  6. );  
  7.  
  8. INSERT INTO Product   
  9.     Values   
  10.     ('4100037','優盤',50),   
  11.     ('4100038','鼠標',30); 

--目標表

  1. CREATE TABLE ProductNew   
  2. (   
  3.     ProductID    varchar(7) NOT NULL PRIMARY KEY,   
  4.     ProductName varchar(100) NOT NULL,   
  5.     Price        decimal(13,2) DEFAULT 0   
  6. ); 

下面再來關注MERGE語句的基本語法:

 

  1. MERGE 目標表  
  2. USING 源表  
  3. ON 匹配條件  
  4. WHEN MATCHED THEN 
  5. 語句  
  6. WHEN NOT MATCHED THEN 
  7. 語句; 

 

以上是MERGE的最最基本的語法,語句執行時根據匹配條件的結果,如果在目標表中找到匹配記錄則執行WHEN MATCHED THEN后面的語句,如果沒有找到匹配記錄則執行WHEN NOT MATCHED THEN后面的語句。注意源表可以是表,也可以是一個子查詢語句。

格外強調一點,MERGE語句***的分號是不能省略的!

回到我們的示例,顯然Product與ProductNew表的MERGE匹配條件為主鍵ProductID字段,初始情況下,ProductNew表為空,此時肯定執行的是WHEN NOT MATCHED THEN后的語句,我們先只考慮源表遞增的情況,MERGE語句如下:

  1. MERGE ProductNew AS d   
  2. USING   
  3.     Product   
  4. AS s   
  5. ON s.ProductID = d.ProductId   
  6.     WHEN NOT MATCHED THEN   
  7.  INSERT( ProductID,ProductName,Price)   
  8.   VALUES(s.ProductID,s.ProductName,s.Price); 

運行后2行受影響,我們已經將Product表的數據同步到了ProductNew表。

現在,我們更新Product表4100037產品的價格,將其修改為55:

  1. UPDATE Product SET Price=55 WHERE ProductID='4100037'

我們也希望每天同步的時候應該將更新后的價格同步到ProductNew表,顯然此時在MERGE語句中應該添加WHEN MATCHED THEN 語句,該語句來更新ProductNew表的價格,添加匹配更新后的MERGE語句:

  1. MERGE ProductNew AS d   
  2. USING   
  3.     Product   
  4. AS s   
  5. ON s.ProductID = d.ProductId   
  6. WHEN NOT MATCHED THEN   
  7.     INSERT( ProductID,ProductName,Price)   
  8.         VALUES(s.ProductID,s.ProductName,s.Price)   
  9. WHEN MATCHED THEN   
  10.     UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price; 

執行后2行受影響,為什么是兩行呢?因為我們的匹配條件只是按ProductID來關聯的,這樣匹配出來的記錄為2行。另外,我們的UPDATE語句里面沒有更新ProductID字段,因為這是完全沒必要的(如果修改了ProductID字段會直接走到NOT MATCHED)。

現在做個破壞,我們將410037產品刪除掉:

  1. DELETE Product WHERE ProductID='4100037'

明顯,上面給出的MERGE語句無法同步這種情況,再次回到MERGE語句的定義,對MERGE的WHEN NOT MATCHED THEN語句稍作擴展:

  1. WHEN NOT MATCHED BY TARGET  

表示目標表不匹配,BY TARGET是默認的,所以上面我們直接使用WHEN NOT MATCHED THEN

  1. WHEN NOT MATCHED BY SOURCE  

表示源表不匹配,即目標表中存在,源表中不存在的情況。

OK,現在我們要完成源表DELETE后,目標表的同步動作,MERGE語句如下:

  1. MERGE ProductNew AS d   
  2. USING   
  3.     Product   
  4. AS s   
  5. ON s.ProductID = d.ProductId   
  6. WHEN NOT MATCHED BY TARGET THEN   
  7.     INSERT( ProductID,ProductName,Price)   
  8.         VALUES(s.ProductID,s.ProductName,s.Price)   
  9. WHEN NOT MATCHED BY SOURCE THEN   
  10.     DELETE   
  11. WHEN MATCHED THEN   
  12. UPDATE SET d.ProductName = s.ProductName, d.Price = s.Price; 

嗯,上面已經使用到MERGE語句中的INSERT、UPDATE、DELETE語句,這足夠完成大多數的同步功能了。當然,MERGE語句還有很多的選項,在此不做詳述,請參考MSDN

原文標題:SQL Server 2008中的MERGE(不僅僅是合并)

鏈接:http://www.cnblogs.com/xfrog/archive/2010/10/13/1850602.html

【編輯推薦】

  1. SQL Server 2000刪除實戰演習
  2. SQL Server存儲過程的命名標準如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. 對SQL Server字符串數據類型的具體描述
  5. SQL Server數據類型的種類與應用
責任編輯:彭凡 來源: 博客園
相關推薦

2011-04-02 14:06:46

SQL Server MERGE

2011-08-19 10:40:27

SQL Server Merge命令

2010-07-19 12:47:04

SQL Server

2011-08-19 11:00:54

SQL Server WaitFor命令

2011-08-19 11:26:41

SQL Server 主密鑰

2010-10-11 09:05:40

SQL Server

2009-04-16 18:15:19

動作審核審核活動SQL Server

2009-04-16 17:44:31

2011-03-15 10:22:42

SQL Server 聯機事務處理

2009-03-17 13:25:13

查詢遷移SQL Server

2010-09-07 11:53:00

SQL語句

2011-08-01 10:09:57

SSAS數據庫

2011-09-01 15:24:22

SQL Server 存儲過程調試

2009-04-27 14:48:44

2010-12-06 09:26:23

SQL Server

2010-11-12 13:08:36

動態sql語句

2009-04-08 09:29:34

SQL Server新特性Resource Go

2010-05-13 10:00:10

SQL Server

2013-05-08 10:01:55

SQL Server 數據備份備份與還原

2009-06-22 10:22:57

SQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一级黄色片一级黄色片 | 综合自拍 | 99精品久久 | 日韩欧美在线观看视频网站 | 亚洲天天干 | 黄色大片免费看 | 福利视频网站 | 在线看黄免费 | 二区视频 | 日韩精品一区二区三区中文字幕 | 一区二区三区在线看 | 日韩精品一区二区三区 | 中文字幕国产视频 | 亚洲高清视频一区二区 | 国产精品高潮呻吟久久 | 极品久久 | 亚洲男人天堂2024 | 99久久99热这里只有精品 | 精品久久久久久亚洲精品 | 国产精品一区二区视频 | 国内精品视频一区二区三区 | 国产激情91久久精品导航 | 色婷婷久久综合 | 久久99国产精品久久99果冻传媒 | 中文字幕日韩一区 | 欧美一区二区三区 | 欧美 日韩 国产 成人 | 久久九九色 | 婷婷成人在线 | 91最新在线视频 | 亚洲欧美中文日韩在线v日本 | 国产免费av在线 | 国产精品久久久久久久久动漫 | 九九热精 | 欧美日韩久久精品 | 蜜臀av日日欢夜夜爽一区 | 欧美在线视频二区 | 成人av播放| a级毛片免费高清视频 | 国产亚洲一区二区三区 | 精品国产一区二区国模嫣然 |