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

SQL Server 2008的實用小道具——merger

數據庫 SQL Server
作為SQL Server 2008中推出的一個小道具merger,具備插入,刪除,修改一起來(適合數據的同步)的功能。讓我們一起來認識它吧。

根據在另一個表中找到的差異在一個表中插入、更新或刪除行,可以對兩個表進行同步。

A. 使用 MERGE 在單個語句中對表執行 UPDATE 和 DELETE 操作

下面的示例使用 MERGE 根據 SalesOrderDetail 表中已處理的訂單,每天更新 AdventureWorks 示例數據庫中的 ProductInventory 表。通過減去每天對 SalesOrderDetail 表中的每種產品所下的訂單數,更新 ProductInventory 表的 Quantity 列。如果某種產品的訂單數導致該產品的庫存量下降到 0 或更少,則會從 ProductInventory 表中刪除該產品對應的行。

  1. USE AdventureWorks;  
  2. GO  
  3. IF OBJECT_ID (N'Production.usp_UpdateInventory', N'P'
  4. IS NOT NULL DROP PROCEDURE Production.usp_UpdateInventory;  
  5. GO  
  6. CREATE PROCEDURE Production.usp_UpdateInventory  
  7.     @OrderDate datetime  
  8. AS 
  9. MERGE Production.ProductInventory AS target  
  10. USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod  
  11.     JOIN Sales.SalesOrderHeader AS soh  
  12.     ON sod.SalesOrderID = soh.SalesOrderID  
  13.     AND soh.OrderDate = @OrderDate  
  14.     GROUP BY ProductID) AS source (ProductID, OrderQty)  
  15. ON (target.ProductID = source.ProductID)  
  16. WHEN MATCHED AND target.Quantity - source.OrderQty <= 0  
  17.     THEN DELETE 
  18. WHEN MATCHED  
  19.     THEN UPDATE SET target.Quantity = target.Quantity - source.OrderQty,  
  20.                     target.ModifiedDate = GETDATE()  
  21. OUTPUT $action, Inserted.ProductID, Inserted.Quantity, Inserted.ModifiedDate, Deleted.ProductID,  
  22.     Deleted.Quantity, Deleted.ModifiedDate;  
  23. GO  
  24.  
  25. EXECUTE Production.usp_UpdateInventory '20030501' 

B. 借助派生的源表,使用 MERGE 對目標表執行 UPDATE 和 INSERT 操作

下面的示例使用 MERGE 以更新或插入行的方式來修改 SalesReason 表。當源表中的 NewName 值與目標表 (SalesReason) 的 Name 列中的值匹配時,就會更新此目標表中的 ReasonType 列。當 NewName 的值不匹配時,就會將源行插入到目標表中。此源表是一個派生表,它使用 Transact-SQL 行構造函數功能指定源表的多個行。有關在派生表中使用行構造函數的詳細信息,請參閱 FROM (Transact-SQL)。

  1. USE AdventureWorks;  
  2. GO  
  3. MERGE INTO Sales.SalesReason AS Target  
  4. USING (VALUES ('Recommendation','Other'), ('Review''Marketing'), ('Internet''Promotion'))  
  5.        AS Source (NewName, NewReasonType)  
  6. ON Target.Name = Source.NewName  
  7. WHEN MATCHED THEN 
  8.  UPDATE SET ReasonType = Source.NewReasonType  
  9. WHEN NOT MATCHED BY TARGET THEN 
  10.  INSERT (Name, ReasonType) VALUES (NewName, NewReasonType)  
  11. OUTPUT $action, inserted.*, deleted.*; 

C. 將 MERGE 語句的執行結果插入到另一個表中
下例捕獲從 MERGE 語句的 OUTPUT 子句返回的數據,并將該數據插入另一個表。MERGE 語句根據在 SalesOrderDetail 表中處理的訂單,更新 ProductInventory 表的 Quantity 列。本示例捕獲已更新的行,并將這些行插入用于跟蹤庫存變化的另一個表中。

  1. USE AdventureWorks;  
  2. GO  
  3. CREATE TABLE Production.UpdatedInventory  
  4.     (ProductID INT NOT NULL, LocationID int, NewQty int, PreviousQty int,  
  5.      CONSTRAINT PK_Inventory PRIMARY KEY CLUSTERED (ProductID, LocationID));  
  6. GO  
  7. INSERT INTO Production.UpdatedInventory  
  8. SELECT ProductID, LocationID, NewQty, PreviousQty  
  9. FROM 
  10. (    MERGE Production.ProductInventory AS pi  
  11.      USING (SELECT ProductID, SUM(OrderQty)  
  12.             FROM Sales.SalesOrderDetail AS sod  
  13.             JOIN Sales.SalesOrderHeader AS soh  
  14.             ON sod.SalesOrderID = soh.SalesOrderID  
  15.             AND soh.OrderDate BETWEEN '20030701' AND '20030731' 
  16.             GROUP BY ProductID) AS src (ProductID, OrderQty)  
  17.      ON pi.ProductID = src.ProductID  
  18.     WHEN MATCHED AND pi.Quantity - src.OrderQty >= 0  
  19.         THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQty  
  20.     WHEN MATCHED AND pi.Quantity - src.OrderQty <= 0  
  21.         THEN DELETE 
  22.     OUTPUT $action, Inserted.ProductID, Inserted.LocationID, Inserted.Quantity AS NewQty, Deleted.Quantity AS PreviousQty)  
  23.  AS Changes (Action, ProductID, LocationID, NewQty, PreviousQty) WHERE Action = 'UPDATE';  
  24. GO 

原文標題:SQL SERVER 2008的幾個新東西:插入,刪除,修改一起來(適合數據的同步)-----merger

鏈接: http://www.cnblogs.com/buaaboyi/archive/2010/09/05/1818281.html

【編輯推薦】

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

2009-04-16 18:15:19

動作審核審核活動SQL Server

2009-04-16 17:44:31

2009-04-16 17:34:19

2011-03-29 12:42:25

SQL Server 高效性

2009-04-16 17:55:15

擴展熱插拔SQL Server

2010-07-16 17:03:35

SQL Server

2011-05-24 13:33:45

2011-03-29 13:10:56

SQL Server

2009-04-27 15:02:42

SQL Server 數據庫引擎升級

2011-03-15 13:57:46

2009-04-16 18:25:55

2010-07-21 11:26:07

SQL Server

2009-02-16 13:21:25

數據挖掘SQL Server SQL Server

2011-05-24 13:39:49

SQL Server

2011-03-29 11:21:47

SQL Server 商業智能

2010-07-13 10:22:06

SQL Server

2010-03-23 09:52:23

SQL Server

2009-02-24 13:15:22

FILESTREAM新特性SQL Server

2011-02-18 17:31:18

SQL Server

2010-07-20 09:15:03

SQL Server
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕精品视频 | 国产一区不卡 | 91av久久久 | 国产精品久久久久久久久婷婷 | 精品久久久久久亚洲综合网站 | 青青久在线视频 | 欧美一级二级在线观看 | 亚洲在线电影 | 2018天天干天天操 | 国产精品明星裸体写真集 | 99国产精品视频免费观看一公开 | 亚洲精品99 | 精品视频一区二区三区在线观看 | 精品久久99 | 黑人巨大精品欧美一区二区免费 | 久久久久久久久91 | 又爽又黄axxx片免费观看 | 成人精品免费视频 | 日韩中文字幕 | 免费a级毛片在线播放 | 欧美精品一二三 | h视频免费观看 | 韩日在线 | www国产成人免费观看视频,深夜成人网 | 欧美福利在线 | 日韩在线中文字幕 | 欧美一区二区在线观看 | 91免费看片神器 | 亚洲一区二区三区在线视频 | 国产精品免费大片 | 国产亚洲精品久久久优势 | 欧美日韩成人一区二区 | 亚洲国产在| 精品国产久 | 日本大香伊一区二区三区 | 日韩中文在线 | 成人精品久久 | 中文字幕精品一区久久久久 | 性做久久久久久免费观看欧美 | 久久久久黄 | 日韩在线一区二区三区 |