SQLServer2008的实用小道具 merger使用介绍

2016-02-19 11:15 4 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐SQLServer2008的实用小道具 merger使用介绍,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

A. 使用 MERGE 在单个语句中对表执行 UPDATE 和 DELETE 操作
  下面的示例使用 MERGE 根据 SalesOrderDetail 表中已处理的订单,每天更新 AdventureWorks 示例数据库中的 ProductInventory 表。通过减去每天对 SalesOrderDetail 表中的每种产品所下的订单数,更新 ProductInventory 表的 Quantity 列。如果某种产品的订单数导致该产品的库存量下降到 0 或更少,则会从 ProductInventory 表中删除该产品对应的行。
  B. 借助派生的源表,使用 MERGE 对目标表执行 UPDATE 和 INSERT 操作
  下面的示例使用 MERGE 以更新或插入行的方式来修改 SalesReason 表。当源表中的 NewName 值与目标表 (SalesReason) 的 Name 列中的值匹配时,就会更新此目标表中的 ReasonType 列。当 NewName 的值不匹配时,就会将源行插入到目标表中。此源表是一个派生表,它使用 Transact-SQL 行构造函数功能指定源表的多个行。有关在派生表中使用行构造函数的详细信息,请参阅 FROM (Transact-SQL)。

  C. 将 MERGE 语句的执行结果插入到另一个表中
  下例捕获从 MERGE 语句的 OUTPUT 子句返回的数据,并将该数据插入另一个表。MERGE 语句根据在 SalesOrderDetail 表中处理的订单,更新 ProductInventory 表的 Quantity 列。本示例捕获已更新的行,并将这些行插入用于跟踪库存变化的另一个表中
代码如下:

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'

代码如下:

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.*;

代码如下:

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.*;

代码如下:

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

来源:https://www.tulaoshi.com/n/20160219/1596852.html

延伸阅读
小道具营造梦幻童话效果   你是否留意过身边的小小道具?并且还让它们发挥了大大的作用?巧妙的利用,会有意想不到的视觉效果哦!今天为大家带来,利用电子彩色灯,香烟,打火机和气泡营造童话梦幻的效果,有木有被暖到呢!跟着教程一起来创作属于你的创意梦幻之境吧! 1.准备道具:打火机 电子闪光灯片 香烟 许愿瓶 气泡 ...
摄影小道具: 太阳眼镜   对,就是你夏天外出时会用的太阳图老师眼镜!这技巧不一定需要用单反拍摄,即使用手机和小DC拍亦可!如果你想让简单的摄影作品看上去有点点深度和构图, 可以试试将太阳眼镜放在你的镜头面前拍摄,以下是一部份成品。 为什么镜框内的画面更清晰呢?太阳眼镜本身就是一块滤镜, 可说是偏光镜和ND滤镜的混合...
如何利用小道具拍摄顽皮蚂蚁   很多家庭现在也会养殖蚂蚁,那么怎样才能够拍摄出勤劳的蚂蚁活泼好动的样子呢?我们可以借助一些小道具的使用。 利用喷壶拍出雨景小品 我们可以在室内运用一些小道具和小手法让拍摄出的作品环境看上去像是在户外,但是实际上又是在桌台这样可控的环境中。本次拍摄我们想要营造一种下雨的感...
摄影小道具:凸透镜   摄影师Sam Hurd继三稜镜之后,又再分享一些摄影小道具拍摄技巧,今次则是凸透镜 (convex lens),这种镜片多见于放大镜、显微镜、望远镜等,而透过把镜片放在镜头前方,调节位置与角度,就可以扭曲光线得到特别的散景与耀光,摄影师称这种小技巧为「lens chimping」。 这个小道具的好处是,很简单就能...
锁定数据库的一个表 代码如下: SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 代码如下: SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 代码如下: SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SELECT 语句中“加锁选项”的功能说明 SQL Server提供...

经验教程

588

收藏

96
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部