【问题标题】:How to get multiple result sets from a stored procedure into another table如何将存储过程中的多个结果集获取到另一个表中
【发布时间】:2022-01-02 18:42:39
【问题描述】:

我的存储过程在执行时返回了 3 组数据。那个时候我想要一些临时表的第二组结果。

例如:我的存储过程正在返回这些结果集:

-----------------------------
Sno   EmpName    EmpNo
-----------------------------
1      Test1      101
2      Test2      102

---------------------------------
ID  StudentName  StudentDOB
---------------------------------
1     abc1        10-10-2020
2     xyz         14-12-2018

----------------------------------------------------------
Sno   Start_Time              End_Time            Duration
----------------------------------------------------------
1     10-10-2021 10:00:00   10-10-2021 10:10:00     10
2     10-10-2021 10:00:00   10-10-2021 10:15:00     15

我想将第二组结果放入某个临时表中。如何只获取特定的结果集?

这是我的存储过程:

CREATE PROCEDURE test
AS
BEGIN
    SELECT * FROM test1
    SELECT * FROM test2
    SELECT * FROM test3
END

执行测试 --> 我想将仅 test2 的 test2 表结果设置为另一个临时表。

【问题讨论】:

  • 存储过程(SQL Server)
  • My SQL 存储过程返回多个表格式结果集。我只想拿必要的桌子。如何获得?
  • 在 TSQL 中无法做到这一点。如果您这样做是为了测试和使用 tSQLt,您可以使用 tSQLt.ResultSetFilter 但这最终会使用 CLR 来完成。对于仅 TSQL 的解决方案,要么将您的 proc 分解为可以单独调用的多个 proc,或者添加一个参数以允许抑制不需要的结果集
  • 您需要进一步解释您在什么情况下尝试在临时表中访问这些结果,您研究和尝试了什么以及您遇到的问题。
  • 只需将参数传递给您的 SP 以指示它是否应该返回结果集或插入临时表。

标签: sql-server


【解决方案1】:

首先从我的角度来看,一个存储过程返回多个表结果不是一个好的方法或解决方案。

您的解决方案中的任何对象(存储过程、函数、视图等)都应该只有一个责任,因此建议您尝试拆分存储过程。

事实上,当我查看数据结果时,3 个结果返回不同的列。我同意 Stu 的评论,即您可以在 SP 上使用参数来指示结果,但坚持认为这不是一个好的解决方案。

好的,您无法更改存储过程,因此,可以使用一种解决方案。 1.- 创建一个与结果结构相同的临时表。 2.-然后您可以将结果插入表格中。 像这样的。

    --stored procedure
CREATE PROCEDURE TEST
AS
BEGIN
SELECT 1 as A, 2 AS B

SELECT 2 as C, 2 as D
END
GO

--creating the temp table 
CREATE table #tmpResult
(field1 int null, field2 int null)
GO

-- the query into temp
INSERT INTO #tmpResult(field1, field2)
EXEC  test 
GO

SELECT * FROM #tmpResult

问题是您的 SP 返回 3 个不同的结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2018-05-21
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多