Stored procedures 如何使用merge从存储过程中插入值

Stored procedures 如何使用merge从存储过程中插入值,stored-procedures,merge,sql-server-2008-r2,Stored Procedures,Merge,Sql Server 2008 R2,我正在尝试这样做: 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].[spG

我正在尝试这样做:

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 );
基本上,标识键来自sp

可能吗

更新1:答案是否定的

阅读在线文档

值(VALUES_list)是一个逗号分隔的常量列表, 返回要插入到目标中的值的变量或表达式 桌子表达式不能包含EXECUTE语句


构建SSIS包。只需创建一个新的数据流任务。使用两个OLEDB源,使其中一个执行存储过程,另一个从要合并的表中选择。确保它们都是由同一件物品订购的。进入每个OLEDB源的高级设置,设置为“排序为真”,然后为您要订购的项目设置排序值。然后将两个数据流移动到
合并联接
。然后将数据流发送到条件拆分,并设置为
INSULL(OrganizationId)
。使用生成的数据流转到OLEDB目标


很抱歉,由于缺少视觉效果,我将在午餐时间添加它们,现在我正忙着添加它们。

,当不匹配时,
子句中唯一有效的东西是:
INSERT[(column_list)]{VALUES(VALUES_list)| DEFAULT VALUES}
-因此,不能调用存储过程来代替插入数据值suh,为什么不直接插入table EXEC dbo.procedure
?为什么你要把
合并到它里面来让事情复杂化?@AaronBertrand这是一个夜间运行的作业,显然我不想插入重复的数据OK,所以
插入#tmp EXEC procedure;插入表格从不存在的#tmp中选择
@Aaron Bertrand程序将返回表格的最大id,因此它不是我可以存储在#tmp表格中的结果列表。