2013-05-17 58 views
2

我試圖做這樣的事情插入值:如何使用合併從一個存儲過程

merge MembershipTEST as T 
using (select OrganisationID, Name From MembershipPending) as S 
on T.OrganisationID = S.OrganisationID 
and T.Name = S.Name 
when not matched then 
insert (MembershipID,OrganisationID, Name) 
values(
(EXEC [dbo].[spGetNextIntKeyByTableName] 
@PKColName = 'MembershipID',@TableName = 'FWBMembership'), 
S.OrganisationID, 
S.Name); 

Bascially的identitykey是從SP

這可能嗎?

更新1:答案是否定的

閱讀在線文檔http://msdn.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx

VALUES(values_list)是一個逗號分隔的常量, 變量或表達式返回值插入到列表目標 表。表達式不能包含EXECUTE語句。

+0

[根據公開和免費的在線文檔](http://msdn.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx),唯一有效的'當不匹配'子句是:'INSERT [(column_list)] {VALUES(values_list)| DEFAULT VALUES}' - so ** no **,你**不能**調用存儲過程來代替插入數據值 –

+2

呃,爲什麼不只是'INSERT table EXEC dbo.procedure'?你爲什麼要試圖將'MERGE'強加給它,使其複雜化? –

+0

@AaronBertrand這是一個夜間運行的工作,顯然我不想插入重複的數據 – ValidfroM

回答

1

構建一個SSIS包。只需創建一個新的數據流任務。使用兩個OLEDB源使其中一個執行存儲過程,另一個從您正在查找的表中選擇MERGE。確保他們都是由相同的東西排序。進入每個OLEDB源的高級設置,將集合排序爲true,然後爲您正在訂購的項目設置排序值。然後將這兩個數據流移至MERGE JOIN。然後將數據流發送到條件拆分並設置爲INSULL(OrganisationID)。使用生成的數據流轉到OLEDB目標。

對不起,由於缺乏視覺效果,我將在午餐時間忙碌地添加它們後再添加它們。

相關問題