佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > SQLServer2008的實(shí)用小道具 merger使用介紹

SQLServer2008的實(shí)用小道具 merger使用介紹

熱門標(biāo)簽:網(wǎng)站排名優(yōu)化 百度競價(jià)排名 Linux服務(wù)器 呼叫中心市場需求 服務(wù)外包 AI電銷 地方門戶網(wǎng)站 鐵路電話系統(tǒng)
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)的行。
  B. 借助派生的源表,使用 MERGE 對目標(biāo)表執(zhí)行 UPDATE 和 INSERT 操作
  下面的示例使用 MERGE 以更新或插入行的方式來修改 SalesReason 表。當(dāng)源表中的 NewName 值與目標(biāo)表 (SalesReason) 的 Name 列中的值匹配時(shí),就會更新此目標(biāo)表中的 ReasonType 列。當(dāng) NewName 的值不匹配時(shí),就會將源行插入到目標(biāo)表中。此源表是一個派生表,它使用 Transact-SQL 行構(gòu)造函數(shù)功能指定源表的多個行。有關(guān)在派生表中使用行構(gòu)造函數(shù)的詳細(xì)信息,請參閱 FROM (Transact-SQL)。

  C. 將 MERGE 語句的執(zhí)行結(jié)果插入到另一個表中
  下例捕獲從 MERGE 語句的 OUTPUT 子句返回的數(shù)據(jù),并將該數(shù)據(jù)插入另一個表。MERGE 語句根據(jù)在 SalesOrderDetail 表中處理的訂單,更新 ProductInventory 表的 Quantity 列。本示例捕獲已更新的行,并將這些行插入用于跟蹤庫存變化的另一個表中
復(fù)制代碼 代碼如下:

USE AdventureWorks;
GO
IF OBJECT_ID (N'Production.usp_UpdateInventory', N'P')
IS NOT NULL DROP PROCEDURE Production.usp_UpdateInventory;
GO
CREATE PROCEDURE Production.usp_UpdateInventory
@OrderDate datetime
AS
MERGE Production.ProductInventory AS target
USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail AS sod
JOIN Sales.SalesOrderHeader AS soh
ON sod.SalesOrderID = soh.SalesOrderID
AND soh.OrderDate = @OrderDate
GROUP BY ProductID) AS source (ProductID, OrderQty)
ON (target.ProductID = source.ProductID)
WHEN MATCHED AND target.Quantity - source.OrderQty = 0
THEN DELETE
WHEN MATCHED
THEN UPDATE SET target.Quantity = target.Quantity - source.OrderQty,
target.ModifiedDate = GETDATE()
OUTPUT $action, Inserted.ProductID, Inserted.Quantity, Inserted.ModifiedDate, Deleted.ProductID,
Deleted.Quantity, Deleted.ModifiedDate;
GO
EXECUTE Production.usp_UpdateInventory '20030501'

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

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

復(fù)制代碼 代碼如下:

USE AdventureWorks;
GO
CREATE TABLE Production.UpdatedInventory
(ProductID INT NOT NULL, LocationID int, NewQty int, PreviousQty int,
CONSTRAINT PK_Inventory PRIMARY KEY CLUSTERED (ProductID, LocationID));
GO
INSERT INTO Production.UpdatedInventory
SELECT ProductID, LocationID, NewQty, PreviousQty
FROM
( MERGE Production.ProductInventory AS pi
USING (SELECT ProductID, SUM(OrderQty)
FROM Sales.SalesOrderDetail AS sod
JOIN Sales.SalesOrderHeader AS soh
ON sod.SalesOrderID = soh.SalesOrderID
AND soh.OrderDate BETWEEN '20030701' AND '20030731'
GROUP BY ProductID) AS src (ProductID, OrderQty)
ON pi.ProductID = src.ProductID
WHEN MATCHED AND pi.Quantity - src.OrderQty >= 0
THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQty
WHEN MATCHED AND pi.Quantity - src.OrderQty = 0
THEN DELETE
OUTPUT $action, Inserted.ProductID, Inserted.LocationID, Inserted.Quantity AS NewQty, Deleted.Quantity AS PreviousQty)
AS Changes (Action, ProductID, LocationID, NewQty, PreviousQty) WHERE Action = 'UPDATE';
GO
您可能感興趣的文章:
  • SQLServer 2008 Merge語句的OUTPUT功能
  • SQLServer 2008中SQL增強(qiáng)之三 Merge(在一條語句中使用Insert,Update,Delete)
  • php函數(shù)array_merge用法一例(合并同類數(shù)組)
  • SQLServer中merge函數(shù)用法詳解

標(biāo)簽:黃山 仙桃 銅川 崇左 衡水 湘潭 蘭州 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQLServer2008的實(shí)用小道具 merger使用介紹》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    忻州市| 那坡县| 滁州市| 通山县| 马龙县| 习水县| 濮阳市| 塔河县| 盐城市| 霍州市| 马龙县| 定远县| 万山特区| 台山市| 盐池县| 郓城县| 阿拉善右旗| 北宁市| 库尔勒市| 衡水市| 辽阳市| 六安市| 旺苍县| 民丰县| 子长县| 措美县| 乃东县| 民勤县| 收藏| 汉寿县| 建瓯市| 萝北县| 赤峰市| 丹巴县| 浦东新区| 高邑县| 临颍县| 类乌齐县| 云和县| 芜湖县| 湘乡市|