exec存储过程来自另一个而不发送结果

时间:2012-06-21 09:16:59

标签: sql stored-procedures sql-server-2000

这可能是一个愚蠢的问题,我尝试使用谷歌搜索,但我可能没有正确地说这个,所以我会尝试解释这个问题:

我正在使用SQL Server 2000,我有一个存储过程(SP1),它遍历一个包含3条记录的表,并在每次迭代时执行另一个存储过程(SP2)。

SP2执行插入操作,然后对插入的记录执行选择。

SP1在迭代后继续,它执行一次选择然后结束。

当我执行SP1时,我只希望返回最后一个select的结果集。但是通过这次迭代,我得到4个结果集(每个迭代1个,然后是最后的SP1选择)全部返回。

当我将它们作为SP1的一部分进行迭代时,是否有某种方式可以说don't return the resultset of SP2

我可以创建另一个与SP2完全相同的存储过程,但最后没有选择,可能会处理它。但我更喜欢向SP1添加一些东西,以防止返回结果集。这可能吗?

这是SP1中的迭代现在的样子:

set nocount on
declare c cursor for select room_id from st_room_ref where active = 1
declare @room_id int,
        @max_c int

open c

while 1 = 1
begin
    fetch c into @room_id
    if @@fetch_status <> 0 break

    select  @max_c = max(call_id) 
    from    st_call 
    where   room_id = @room_id 

    if      @max_c is null
    exec    st_getCall @room_id
end

close c
deallocate c

请不要论文关于游标的错误。只是希望某种方式告诉st_getCall SP不要发送它的结果集。

1 个答案:

答案 0 :(得分:1)

您是否尝试过以下操作?

INSERT INTO
  @itteration_results
EXEC
  st_getCall @room_id

这有限制;你不能把它嵌套得更深; st_getCall内部不能有相同内容。

如果你最终需要这样做,你可能会从这个问题的接受答案中得到更多的抨击: