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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
SQLServer2008的實(shí)用小道具——merger

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

10多年專注成都網(wǎng)站制作,成都企業(yè)網(wǎng)站建設(shè),個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都企業(yè)網(wǎng)站建設(shè),高端網(wǎng)頁制作,對輕質(zhì)隔墻板等多個方面,擁有豐富的網(wǎng)站維護(hù)經(jīng)驗(yàn)。

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ù)的詳細(xì)信息,請參閱 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 

名稱欄目:SQLServer2008的實(shí)用小道具——merger
標(biāo)題鏈接:http://www.dlmjj.cn/article/djoiece.html