【问题标题】:Separate Stored Procedure result sets into Temporary tables将存储过程结果集分离到临时表中
【发布时间】:2015-04-30 10:24:10
【问题描述】:

我有一个返回 2 个结果集的存储过程。我正在尝试调用存储过程并将第一个结果集的值插入到临时表中,但我无法执行此操作,因为我要返回 2 个结果集。

有没有办法将一个结果集或两者都返回到单独的临时表中。我无法更改存储过程。

存储过程结果集1

column a | column b | coulmn c 

存储过程结果集2

column x | column y

我正在做的是

DECLARE @ResultSet1Table 
TABLE (
        column a
       ,column b
       ,column c
       )

INSERT INTO @ResultSet1Table 
   EXEC StoredProc

并收到错误消息

列名或提供的值的数量与表定义不匹配

因为第二个结果集。

【问题讨论】:

  • 我以前研究过这个,但我认为没有办法做到这一点。我希望有人提供一个让我看起来像个白痴的答案。
  • 你使用的是哪个版本的sql server?
  • 为什么不声明2个表变量然后合并它们?
  • 我有一个不错的解决方法,假设您可以稍微修改存储过程

标签: sql-server tsql stored-procedures


【解决方案1】:

好吧,这有点小题大做:

CREATE PROCEDURE SPMultipleResultsSets
AS

SELECT *
FROM 
    ( VALUES (1),(2),(3),(4)) Vals(Num)

SELECT *
FROM 
    ( VALUES ('ABC'),('DEF'),('GHI'),('JKL')) Strings(string)

您需要启用临时分布式查询:

sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT * INTO #Temp FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',
'EXEC DBNAME.dbo.SPMultipleResultsSets')
-- Select Table
SELECT *
FROM #Temp;

返回:

Num
1
2
3
4

【讨论】:

    【解决方案2】:

    我认为我有一个合理的解决方法。只需添加列来标识每个结果集。然后用查询将它们分开。看看吧:

    CREATE PROCEDURE usp_test
    AS
    SELECT  colA = 'A',
            colB = 'B',
            colC = 'C';
    
    SELECT  colX = 'X',
            colY = 'Y',
            '!';
    GO
    
    DECLARE @ResultSetTable TABLE(col1 CHAR,col2 CHAR,col3 CHAR);
    
    INSERT INTO @ResultSetTable
        EXEC usp_test
    
    --Set 1
    SELECT *
    FROM @ResultSetTable
    WHERE col3 <> '!'
    
    --Set 2
    SELECT *
    FROM @ResultSetTable
    WHERE col3 ='!'
    

    第 1 组的结果:

    col1 col2 col3
    ---- ---- ----
    A    B    C
    

    第 2 组的结果:

    col1 col2 col3
    ---- ---- ----
    X    Y    !
    

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 2021-01-10
      • 2018-11-16
      • 2020-01-26
      • 2012-05-30
      • 2015-10-30
      • 2018-07-05
      • 1970-01-01
      相关资源
      最近更新 更多