SQL存储调用另一个存储, 另一个存储返回多个结果集

qq_24721551 2018-08-20 03:20:33
存储A调用存储B, 存储B返回多个结果集, 如何在存储A里面 获取存储B的多个结果集?
...全文
259 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-08-20
  • 打赏
  • 举报
回复
USE tempdb
GO
-- 定义中转表,结构与你需要输出的一致,但需要增加 sessionId 和 addTime,
-- sessionId 防止并发时出现无法辨别的问题
-- addTime 记录插入时间,便于观察
IF OBJECT_ID('dbo.tmp_transfer1') IS NOT NULL DROP TABLE tmp_transfer1
IF OBJECT_ID('dbo.tmp_transfer2') IS NOT NULL DROP TABLE tmp_transfer2
GO
CREATE TABLE dbo.tmp_transfer1(sessionId VARCHAR(50),addTime DATETIME, id INT,n VARCHAR(50))
CREATE TABLE dbo.tmp_transfer2(sessionId VARCHAR(50),addTime DATETIME, id INT,n VARCHAR(50))
GO
IF OBJECT_ID('Proc_A') IS NOT NULL DROP PROC Proc_A
IF OBJECT_ID('Proc_B') IS NOT NULL DROP PROC Proc_B
GO
-- =============================================
-- Author: yenange
-- Create date: 2018-08-20
-- Description:
-- =============================================
CREATE PROCEDURE dbo.Proc_B
@sessionId VARCHAR(50)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.tmp_transfer1
(
sessionId,
addTime,
id,
n
)
SELECT
@sessionId
, GETDATE()
, sv.number
, NEWID()
FROM MASTER.dbo.spt_values sv
WHERE sv.type='P' AND sv.number BETWEEN 1 AND 3

INSERT INTO dbo.tmp_transfer2
(
sessionId,
addTime,
id,
n
)
SELECT
@sessionId
, GETDATE()
, sv.number
, NEWID()
FROM MASTER.dbo.spt_values sv
WHERE sv.type='P' AND sv.number BETWEEN 10 AND 13
END
GO
-- =============================================
-- Author: yenange
-- Create date: 2018-08-20
-- Description:
-- =============================================
CREATE PROCEDURE dbo.Proc_A
AS
BEGIN
SET NOCOUNT ON;

DECLARE @guid VARCHAR(50)
SET @guid = NEWID();

--执行操作,将数据存放到 中转表
EXEC Proc_B @guid

--根据得到的数据,执行下一步的处理
SELECT * FROM dbo.tmp_transfer1 WHERE sessionId=@guid;
SELECT * FROM dbo.tmp_transfer2 WHERE sessionId=@guid;

--清除产生的数据
DELETE FROM dbo.tmp_transfer1 WHERE sessionId=@guid;
DELETE FROM dbo.tmp_transfer1 WHERE sessionId=@guid;
END
GO

EXEC Proc_A


  • 打赏
  • 举报
回复
放到固定表名的临时表。或者普通表,过程中间truncate掉
qq_24721551 2018-08-20
  • 打赏
  • 举报
回复
存储B返回的是多个集合, 比如就是select * from A 和 select * from B. 返回的是两个table
二月十六 2018-08-20
  • 打赏
  • 举报
回复
在存储过程中执行
insert into #temp exec 另一个存储过程名

从临时表#temp 中读取数据使用

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧