sql2008-merge(insert,update,delete)


IF OBJECT_ID ('tempdb..#Departments') IS NOT NULL
DROP TABLE #Departments;
GO
CREATE TABLE #Departments
(
DeptID tinyint NOT NULL PRIMARY KEY,
DeptName nvarchar(30),
Manager nvarchar(50)
);
GO
INSERT INTO #Departments
VALUES
(1, 'Human Resources', 'Margheim'),
(2, 'Sales', 'Byham'),
(3, 'Finance', 'Gill'),
(4, 'Purchasing', 'Barber'),
(5, 'Manufacturing', 'Brewer');

IF OBJECT_ID ('tempdb..#Departments_delta') IS NOT NULL
    DROP TABLE #Departments_delta;
GO
CREATE TABLE #Departments_delta
(
DeptID tinyint NOT NULL PRIMARY KEY,
DeptName nvarchar(30),
Manager nvarchar(50)
);
GO
INSERT INTO #Departments_delta VALUES
    (1, 'Human Resources', 'Margheim'), (2, 'Sales', 'Erickson'),
    (3 , 'Accounting', 'Varkey'),(4, 'Purchasing', 'Barber'),
    (6, 'Production', 'Jones'), (7, 'Customer Relations', 'Smith');
GO


select * from #Departments
select * from #Departments_delta

MERGE #Departments AS d
USING #Departments_delta AS dd
ON (d.DeptID = dd.DeptID)
WHEN MATCHED AND d.Manager <> dd.Manager OR d.DeptName <> dd.DeptName
    THEN UPDATE SET d.Manager = dd.Manager, d.DeptName = dd.DeptName
WHEN NOT MATCHED THEN
    INSERT (DeptID, DeptName, Manager)
    VALUES (dd.DeptID, dd.DeptName, dd.Manager)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE
OUTPUT $action,
       inserted.DeptID AS SourceDeptID,
       inserted.DeptName AS SourceDeptName,
       inserted.Manager AS SourceManager,
       deleted.DeptID AS TargetDeptID,
       deleted.DeptName AS TargetDeptName,
       deleted.Manager AS TargetManager;   

 

select * from #Departments

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值