如何在SQL Server 2008中使用MERGE命令从源中删除?

nfa*_*379 26 merge sql-server-2008

我目前正在使用以下合并代码将日期从源迁移到目标.我有一个新的要求,扩展下面的代码,一旦在目标上执行更新/插入,就从源中删除记录.这可能是使用合并(我在网上看到的所有示例都在目标上执行del/insert/update而不是在源上)

    MERGE Target1 AS T
USING Source1 AS S
ON (T.EmployeeID = S.EmployeeID) 
WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName)
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%'
    THEN DELETE  ;
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 34

您可以使用output子句将已修改/插入的行捕获到表变量,并在合并后将其与delete语句一起使用.

DECLARE @T TABLE(EmployeeID INT);

MERGE Target1 AS T
USING Source1 AS S
ON (T.EmployeeID = S.EmployeeID) 
WHEN NOT MATCHED BY TARGET AND S.EmployeeName LIKE 'S%' 
    THEN INSERT(EmployeeID, EmployeeName) VALUES(S.EmployeeID, S.EmployeeName)
WHEN MATCHED 
    THEN UPDATE SET T.EmployeeName = S.EmployeeName
WHEN NOT MATCHED BY SOURCE AND T.EmployeeName LIKE 'S%'
    THEN DELETE  
OUTPUT S.EmployeeID INTO @T;

DELETE Source1
WHERE EmployeeID in (SELECT EmployeeID
                     FROM @T);
Run Code Online (Sandbox Code Playgroud)