2013-07-13 67 views
1

鑑於是一個簡單的MERGE語句。在哪裏插入/更新記錄到Traget表中。問題:是否也可以將這些值插入另一個表中,插入標誌爲0,更新爲1?例如。當不匹配時插入到目標和另一個表中,匹配時執行更新目標並插入到另一個表中。合併聲明與兩個插入?

MERGE dbo.FactBuyingHabits AS Target 
USING (SELECT CustomerID, ProductID, PurchaseDate FROM dbo.Purchases) AS Source 
    ON (Target.ProductID = Source.ProductID AND Target.CustomerID = Source.CustomerID) 
WHEN MATCHED THEN 
    UPDATE SET Target.LastPurchaseDate = Source.PurchaseDate 
    --and insert into test_tbl values (1, Source.ProductID, Source.CustomerID) --? 
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (CustomerID, ProductID, LastPurchaseDate) 
    VALUES (Source.CustomerID, Source.ProductID, Source.PurchaseDate) 
    --and insert into test_tbl values (0, Source.ProductID, Source.CustomerID) --? 
+0

你可以在目標表上創建一個觸發器來處理'日誌'。 –

回答

0

你應該閱讀有關OUTPUT

EX(source);

DECLARE @MergeOutput1 table 
(
    ActionType nvarchar(10), 
    BookID int, 
    OldBookTitle nvarchar(50), 
    NewBookTitle nvarchar(50), 
    ModifiedDate datetime 
); 

-- use MERGE statement to perform update on Book2 

MERGE Books2 AS b2 
USING Books AS b1 
ON (b2.BookID = b1.BookID) 
WHEN MATCHED 
THEN UPDATE 
SET b2.BookTitle = b1.BookTitle 
OUTPUT 
    $action, 
    INSERTED.BookID, 
    DELETED.BookTitle, 
    INSERTED.BookTitle, 
    INSERTED.ModifiedDate 
    INTO @MergeOutput1;