我希望做这样的事情,但它不会编译。我的存储过程返回一个表。这就是我想要做的事情 - 也许有人可以指出我做错了,因为这不会编译:
MERGE table AS target
USING (EXEC [dbo].[sp_Something] @Rundate = '5/13/2011', @SPID = 56)
AS source (<Columns Returned By Stored Proc Go Here>)
ON TARGET.ID = SOURCE.ID
WHEN MATCHED THEN
UPDATE SET Field = Value...
WHEN NOT MATCHED THEN
INSERT ( Field )
VALUES (Value);
答案 0 :(得分:5)
在需要表的地方不能使用存储过程。您必须使用表变量,子查询或表值函数。例如(不确定这是否有效,我以前从未使用过MERGE
):
DECLARE @Something TABLE (columns go here...)
INSERT @Something
EXEC [dbo].[sp_Something] @Rundate = '5/13/2011', $SPID = 56
MERGE table as target
USING @Something
AS Source ...
答案 1 :(得分:3)
您只能INSERT ... EXEC
。解决方法是将#mpmp表或@table变量换行,并将其用于MERGE。
答案 2 :(得分:0)
有时我创建函数或视图来返回sproc会发生的内容,然后编写sproc来调用视图/函数。这样我就封装了逻辑,能够在连接中使用查询,并利用sproc功能。