SqlServer_MERGE命令;

说明:通过MERGE命令,可以将多个DML动作语句(INSERT、UPDATE、DELETE)组合成一个整体动作,从而提高性能(它们可共享许多相同的物理操作)和简化事务。
(1)、示例
USE AdventureWorks2008
GO
CREATE TABLE Sales.MonthlyRollup
{
	Year smallint NOT NULL,
	Month tinyint NOT NULL,
	ProductID int NOT NULL FOREIGN KEY REFERENCES Production.Product(ProductID),
	QtySold int NOT NULL,
	CONSTRAINT PKYearMonthProductID PRIMARY KEY (Year, Month, ProductID)
}
MERGE Sales.MonthlyRollup AS smr
USING
(
	SELECT soh.OrderDate, sod.ProductID, SUM(sod.OrderQty) AS QtySold
	FROM Sales.SalesOrderHeader soh
	JOIN Sales.SalesOrderDetail sod
	ON soh.SalesOrderID = sod.SalesOrderID
	WHERE soh.OrderDate >= '2003-08-01' AND soh.OrderDate < '2003-08-02'
	GROUP BY soh.OrderDate, sod.ProductID
) AS S
ON (s.ProductID = smr.ProductID)
WHEN MATCHED THEN
	UPDATE SET smr.QtySold = smr.QtySold + s.QtySold
WHEN NOT MATCHED THEN
	INSERT (Year, Month, ProductID, QtySold)
	VALUES (DATEPART(YY, s.ORDERDATE), DATEPART(M, s.OrderDate), s.ProductID, s.QtySold);
切记,MERGE语句最后的分号是必须的;
(2)、语法
MERGE [TOP (<expression>) [PERCENT]]
	[INTO] <target table> [WITH (<hint>)] [[AS] <alias>]
USING <source query>
ON <condition for join with target>
[WHEN MATCHED [AND <clause search condition>]
	THEN <merge matched>]
[WHEN NOT MATCHED [BY TARGET] [AND <clause search condition>] 
	THEN <merge not matched>]
[WHEN NOT MATCHED BY SOURCE [AND <clause search condition>] 
	THEN <merge matched>]
[<output clause>]
[OPTION (<query hint> [,...n])];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值