我有两个相当大而复杂的存储过程。我想从第一个存储过程调用第二个存储过程。例如:
-- stored_procedure_one
select tb1.col1, tb1.col2, sp1.col3, sp1.col4
from table1 tb1
inner join stored_procedure_two sp1 on sp1.col1 = tbl1.col1
与SQL类似,因为上面的脚本给我一个无效的对象错误信息。
在这个例子中使用临时表并不好,因为如果我这样做,只需要一小时就可以用第二个存储过程中的所有数据填充临时表。我只希望存储过程返回所需的数据。
答案 0 :(得分:3)
这不起作用。您无法加入存储过程。但是,您可以考虑将stored_procedure_two更改为table-valued user defined function。然后你可以加入'通过交叉申请。我已经在很多场合做过这个并且效果很好。
如果第二个存储过程太大且太复杂,则可能无法转换为UDF。在这种情况下,我认为你唯一的选择是将第二个存储过程的结果保存到表中并加入其中。但这可能有点低效和混乱。
答案 1 :(得分:0)
您可以在局部变量表中添加第二个过程的结果
DECLARE @Table TABLE
(
Col1 int,
Col2 ...
)
INSERT INTO @Table
EXEC stored_procedure_two
select tb1.col1, tb1.col2, sp1.col3, sp1.col4
from table1 tb1
inner join @Table tbl2 on sp1.col1 = tbl1.col1