如何在存储过程中执行别的存储过程并获取其返回的结果集

背景

在sqlserver存储过程的编写过程中,通常会碰到繁杂的业务逻辑,将一个大的存储过程拆分成多个小存储过程来做是常用的做法。

问题

在存储过程A中需要调用存储过程B,而存储过程B返回一个Table,A需要获取到B的Table,再进行下一步的处理。

本文解决的问题是:如何在A中执行B,并获取B的返回Table

思路

在A中使用Exec来执行存储过程B

在A中定义临时表,并将B返回的数据插入临时表中

步骤

新建一张测试表,并批量向表中插入若干数据

CREATE TABLE TestTable ( ID INT )

INSERT  INTO TestTable
        SELECT  1
        UNION
        SELECT  2
        UNION
        SELECT  3

SELECT * FROM TestTable

 新建存储过程B,B会返回一张Table
 

CREATE PROCEDURE [dbo].[UP_B]
AS
BEGIN
      SELECT ID,'ComeFromB' FROM TestTable
END

 新建存储过程A,A调用B,并将B返回的Table插入到A定义的临时表中

CREATE PROCEDURE [dbo].[UP_A]
AS
BEGIN
      CREATE TABLE #Temp (ID INT,Msg VARCHAR(30))
      INSERT INTO #Temp EXEC UP_B

      SELECT * FROM #Temp
END

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/database/SQLServer/

执行结果

全部代码

CREATE TABLE TestTable ( ID INT )

INSERT  INTO TestTable
        SELECT  1
        UNION
        SELECT  2
        UNION
        SELECT  3
go

CREATE PROCEDURE [dbo].[UP_B]
AS
BEGIN
      SELECT ID,'ComeFromB' FROM TestTable
END
go

CREATE PROCEDURE [dbo].[UP_A]
AS
BEGIN
      CREATE TABLE #Temp (ID INT,Msg VARCHAR(30))
      INSERT INTO #Temp EXEC UP_B

      SELECT * FROM #Temp
END
go

EXEC [UP_A]
go

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索select
, 存储过程
, table
, create
, temp
, select存储
procedure
存储过程返回结果集、返回结果集的存储过程、存储过程返回执行成功、执行存储过程返回值、存储过程返回执行结果,以便于您获取更多的相关知识。

时间: 2025-01-18 23:35:15

如何在存储过程中执行别的存储过程并获取其返回的结果集的相关文章

大量数据执行-oracle在存储过程中执行update语句

问题描述 oracle在存储过程中执行update语句 在存储过程中经过加工对表执行update语句,但表的数据太大了,2百多万数据的表我就要执行1个多小时,,,8千多万数据的表要怎么办啊? 解决方案 有这样的思路你可参考下: 思路1.写存储过程,引入loop循环,分批次更新.提交: 思路2.以nologging形式重新建表,按新规则把数据插过来:

mysql 存储过程中使用了游标和临时表,返回的临时表数据不准确

问题描述 mysql 存储过程中使用了游标和临时表,返回的临时表数据不准确 DELIMITER $$ USE laolao$$ DROP PROCEDURE IF EXISTS parent_sport_sort1$$ CREATE DEFINER=root@% PROCEDURE parent_sport_sort1(IN jidb VARCHAR(64),IN uname VARCHAR(64),IN starttime VARCHAR(64),IN endtime VARCHAR(64),

js-C#中Webbrower控件如果获取Json返回数据

问题描述 C#中Webbrower控件如果获取Json返回数据 登陆QQ空间后,提交http://r.qzone.qq.com/cgi-bin/tfriend/friend_mngfrd_get.cgi?uin=504558588&rd=0.11234432621859014&g_tk=1037379006&fupdate=1 的Url就可以返回一个包含虽有好友Json数据的页面,内容如下 _Callback({ "code":0, "subcode&

MySQL 存储过程中执行动态SQL语句的方法_Mysql

drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500); set my_sqll='select * from aa_list'; set @ms=my_sqll; PREPARE s1 from @ms; EXECUTE s1; deallocate prepare s1; end; 以上是小编为您精心准备的的内容,在的博客.问答.公众号.

在存储过程中执行动态sql语句,能否提高性能

问题描述 原本在后台写的sql语句很复杂,属于多表连接操作,现在把它放在了存储过程里用动态sqlexec执行,能否提高性能呢 解决方案 解决方案二:1.可以减轻程序负担,把这些工作都交给DBMS2.程序维护起来更加简单3.仅是个人观点解决方案三:存储过程执行动态sql语句时结尾exec(@sql)和execsp_executesql@sql有何区别解决方案四:差不多的,要提高用存储过程好了解决方案五:但是参数是要动态的,必须用动态SQL

间歇性问题 存储过程中执行insert语句:找不到对象 "XX",因为它不存在或者您没有所需的权限。

问题描述 我的sql账号只具有对存储过程PROC_InsertPeisPatient的执行权限,没有对表PeisPatient授权平均执行7次,有6次正常执行完成有1次报错:找不到对象"PeisPatient",因为它不存在或者您没有所需的权限.求助各位帮忙看看可能的原因ALTERPROCEDURE[dbo].[PROC_InsertPeisPatient]@IDCardNoVARCHAR(30),@Input_CodeVARCHAR(8),@ID_Sexint,@Sexvarchar

shell脚本中执行python脚本并接收其返回值的例子_linux shell

1.在shell脚本执行python脚本时,需要通过python脚本的返回值来判断后面程序要执行的命令 例:有两个py程序  hello.py 复制代码 代码如下: def main():     print "Hello" if __name__=='__main__':     main() world.py def main():     print "Hello" if __name__=='__main__':     main() shell 脚本 te

Java执行sql语句并获取指定返回值

当我们插入一条数据的时候,我们很多时候都想立刻获取当前插入的主键值返回以做它用.我们通常的做法有如下几种: 1.先 select max(id) +1 ,然后将+1后的值作为主键插入数据库: 2.使用特定数据库的 auto_increment 特性,在插入数据完成后,使用 select max(id) 获取主键值: 3.对于Oracle,使用 sequence 获取值. 对于以上3种方法都无法绝对保证在高并发情况下的操作的原子性. 现记录以下几种获取数据库主键值方法: 1.数据库原生支持的sql

在SQL Server中重新编译存储过程

在执行诸如添加索引或更改索引列中的数据等操作更改了数据库时,应重新编译访问数据库表的原始查询计划以对其重新优化.在 Microsoft SQL Server 2005 重新启动后第一次运行存储过程时自动执行此优化.当存储过程使用的基础表发生变化时,也会执行此优化.但如果添加了存储过程可能从中受益的新索引,将不自动执行优化,直到下一次 Microsoft SQL Server 重新启动后再运行该存储过程时为止.在这种情况下,强制在下次执行存储过程时对其重新编译会很有用. 必要时,强制重新编译存储过