2

这可能是一个愚蠢的问题,我尝试过谷歌搜索,但我可能没有正确表达这个问题,所以我将尝试在这里解释这个问题:

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

SP2 进行插入,然后对插入的记录进行选择。

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

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

don't return the resultset of SP2当我将它们作为 SP1 的一部分进行迭代时,有什么办法可以说?

我可以创建另一个与 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_getCallSP 不要将其结果集发回。

4

1 回答 1

1

您是否尝试过以下操作?

INSERT INTO
  @itteration_results
EXEC
  st_getCall @room_id

这有一个限制;你不能把它嵌套得更深;st_getCall里面不能有同样的东西。

如果您最终确实需要它,您可能会从这个问题的公认答案中获得更多信息:

于 2012-06-21T09:32:06.313 回答