我在這裏讀的MSDN網站: http://technet.microsoft.com/en-us/library/bb510625.aspxMERGE也可以刪除嗎?例如只顯示INSERT/UPDATE
和我有點困惑的一兩件事。
來自該網站的示例(複製在底部)使用行WHEN NOT MATCHED BY TARGET
。我的問題是,我可以用它來插入,更新和刪除所有在同一個合併?例如:
--Lazy syntax, but I think you get the idea.
MERGE x AS TARGET USING (ID, [More Fields...]) AS SOURCE
WHEN MATCHED
update
WHEN NOT MATCHED IN TARGET
insert
WHEN NOT MATCHED IN SOURCE
delete
MSDN例子:
USE AdventureWorks2012;
GO
-- Create a temporary table variable to hold the output actions.
DECLARE @SummaryOfChanges TABLE(Change VARCHAR(20));
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 INTO @SummaryOfChanges;
-- Query the results of the table variable.
SELECT Change, COUNT(*) AS CountPerChange
FROM @SummaryOfChanges
GROUP BY Change;
在這一點上,你可能只是更換表? – BoeroBoy 2012-08-09 15:22:02
是的,你可以。 @BoeroBoy - 替換桌子可能會過度。例如同步99%的行匹配的兩個表。 – 2012-08-09 15:23:20
也許一些更好的例子在這裏:http://technet.microsoft.com/en-us/library/bb522522(v=sql.100).aspx – 2012-08-09 15:24:46