美文网首页
在存储过程中如何使用另一个存储过程返回的结果集

在存储过程中如何使用另一个存储过程返回的结果集

作者: 肉肉要次肉 | 来源:发表于2018-01-17 16:51 被阅读15次

与这个问题具有相同性质的其他描述还包括:

1、如何在存储过程中检索动态SQL语句的执行结果?

2、存储过程中如何根据另一个存储过程的执行结果选择执行流程?

3、存储过程中如何根据动态SQL语句的查询结果更改执行流程?

4、如何实现类似select * from (EXEC proedure_name @parameters_var)as datesource where ...的功能?

一个存储过程A使用另一个存储过程B的名字(或一段SQL语句或一个不确定的表名,字段名)作为参数,如何在不改动存储过程B的情况下,对存储过程B的执行结果记录集进行过滤/更改,再将过滤/更改后的结果集返回给存储过程A 的调用者?

上面这些问题都有一个共同点,那就是都希望对存储过程(或动态SQL语句)的执行结果进行再处理,但是标准的SQL语句只能处理数据表,而一个存储过程(或动态SQL语句)的执行结果虽然是记录集,但它们本身不能当做数据表来处理。这样就大大限制了存储过程(或动态SQL语句)的应用范围,它们只能作为将记录集返回给应用程序前的最后一个处理层。如果我们可以像使用普通的数据表那样使用存储过程(或动态SQL语句)该多好。

处理流程如下:

1、创建一个临时表#temp,表结构与目标存储过程procedure_name的返回结果集兼容(兼容即可,不必相同)

create table #temp(ID  int IDENTITY (1,1)     not null,

。。。)

2、执行存储过程并将存储过程的返回结果集插入临时表

insert into #temp EXEC procedure_name @parameters_var

3、现在可以使用(过滤、更改或检索)#temp了

if exists(select * from #temp)

      begin

           --执行分支1

      end

else

       begin

            --执行分支2

       end

4、最后清除临时表

drop table #temp


对于动态SQL语句,只要将第二步改为

insert into #temp EXEC dbo.sp_executesql @querystring_var

即可。

相关文章

网友评论

      本文标题:在存储过程中如何使用另一个存储过程返回的结果集

      本文链接:https://www.haomeiwen.com/subject/tyruoxtx.html