2011-05-16 189 views
9

我正在嘗試使用MERGE語句來完成以下操作。我有一個SP,我將TableValue參數傳遞給它。這是我的SP的樣子:SQL Server 2008 - MERGE語句 - 在WHEN MATCHED塊中執行多個操作

CREATE PROC sp_AddInformation 
@IntoTbl dbo.Information READONLY , 
@baseEventType dbo.EventType READONLY 

AS 

BEGIN 

MERGE Information 
USING (SELECT InfoID, NewsID, NewsType FROM @IntoTbl) AS baseInfo (InfoID, NewsID, NewsType) 
ON (info.infoID = baseInfo.InfoID) 
WHEN MATCHED 
     THEN 
     --EXEC dbo.sp_insertEventInfo(@baseEventType) (This is not working) 

     UPDATE set Info.Reporter = baseInfo.Reporter 
WHEN NOT MATCHED BY SOURCE 
     THEN 

     DELETE 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT VALUES (InfoID, NewsID,NewsType); 
END 

有誰知道我可以調用另一個SP或WHEN匹配塊上的其它表執行另一個合併?

回答

9

這是不可能的調用存儲過程或從when matched塊合併。您只能進行更新或刪除(或兩者兼而有之)。從merge的文檔。

<merge_matched>::= 
    { UPDATE SET <set_clause> | DELETE } 

可以使用output子句來捕獲在when matched更新的行。輸出可以在表變量中捕獲,然後您可以在另一個合併語句或存儲過程中使用該變量。在輸出中使用inserted.*$action。從when matched行是$action = 'UPDATE'

1

語法表明UPDATE SET或DELETE是唯一選項merge_matched

如圖here

+0

我可以在匹配時或不匹配時使用另一個合併語句? – Asdfg 2011-05-17 13:56:49