【发布时间】:2013-05-17 14:23:53
【问题描述】:
我正在尝试做这样的事情:
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 );
基本上identitykey来自一个sp
有可能吗?
更新 1:答案是否定的
阅读在线文档http://msdn.microsoft.com/en-us/library/bb510625%28v=sql.105%29.aspx
VALUES (values_list) 是以逗号分隔的常量列表, 变量,或返回值以插入目标的表达式 桌子。表达式不能包含 EXECUTE 语句。
【问题讨论】:
-
According to the publicly and freely available online documentation,
when not matched子句中唯一有效的内容是:INSERT [ ( column_list ) ] { VALUES ( values_list ) | DEFAULT VALUES }- 所以否,你不能调用存储的代替插入数据值的过程 -
呃,为什么不只是
INSERT table EXEC dbo.procedure?你为什么要通过硬塞MERGE来使事情复杂化? -
@AaronBertrand 这是一个夜间运行的工作,显然我不想插入重复的数据
-
好的,所以
INSERT #tmp EXEC procedure; INSERT table SELECT FROM #tmp WHERE NOT EXISTS -
@Aaron Bertrand proc 将返回表中的最大 ID,因此它不是我可以存储在 #tmp 表中的结果列表。
标签: stored-procedures merge sql-server-2008-r2