自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

  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 對目標(biāo)表執(zhí)行 UPDATE 和 INSERT 操作

下面的示例使用 MERGE 以更新或插入行的方式來修改 SalesReason 表。當(dāng)源表中的 NewName 值與目標(biāo)表 (SalesReason) 的 Name 列中的值匹配時,就會更新此目標(biāo)表中的 ReasonType 列。當(dāng) NewName 的值不匹配時,就會將源行插入到目標(biāo)表中。此源表是一個派生表,它使用 Transact-SQL 行構(gòu)造函數(shù)功能指定源表的多個行。有關(guān)在派生表中使用行構(gòu)造函數(shù)的詳細信息,請參閱 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 語句的執(zhí)行結(jié)果插入到另一個表中
下例捕獲從 MERGE 語句的 OUTPUT 子句返回的數(shù)據(jù),并將該數(shù)據(jù)插入另一個表。MERGE 語句根據(jù)在 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 

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

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

【編輯推薦】

  1. SQL Server 2000刪除實戰(zhàn)演習(xí)
  2. SQL Server存儲過程的命名標(biāo)準(zhǔn)如何進行?
  3. 卸載SQL Server 2005組件的正確順序
  4. 對SQL Server字符串?dāng)?shù)據(jù)類型的具體描述
  5. SQL Server數(shù)據(jù)類型的種類與應(yīng)用
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-04-16 17:44:31

2009-04-16 18:15:19

動作審核審核活動SQL Server

2011-03-29 12:42:25

SQL Server 高效性

2009-04-16 17:34:19

2010-07-16 17:03:35

SQL Server

2010-07-21 11:26:07

SQL Server

2009-04-16 17:55:15

擴展熱插拔SQL Server

2011-03-29 13:10:56

SQL Server

2009-04-16 18:25:55

2009-04-27 15:02:42

SQL Server 數(shù)據(jù)庫引擎升級

2011-03-15 13:57:46

2011-05-24 13:33:45

2011-03-29 11:21:47

SQL Server 商業(yè)智能

2009-02-16 13:21:25

數(shù)據(jù)挖掘SQL Server SQL Server

2011-05-24 13:39:49

SQL Server

2010-07-13 10:22:06

SQL Server

2010-11-10 10:27:58

訪問SQL Serve

2011-02-18 17:31:18

SQL Server

2010-03-23 09:52:23

SQL Server

2009-02-24 13:15:22

FILESTREAM新特性SQL Server
點贊
收藏

51CTO技術(shù)棧公眾號