<div class="codebody" id="code16973"> 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'
<div class="codebody" id="code8687"> 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.;
<div class="codebody" id="code26182"> 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.LocationID,Inserted.Quantity AS NewQty,Deleted.Quantity AS PreviousQty) AS Changes (Action,ProductID,PreviousQty) WHERE Action = 'UPDATE'; GO