Sql server 将存储过程结果集分离到临时表中

Sql server 将存储过程结果集分离到临时表中,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有一个存储过程,返回2个结果集。我试图调用存储过程并将第一个结果集的值插入到临时表中,但无法执行此操作,因为我返回了两个结果集 有没有办法只将一个或两个结果集返回到单独的临时表中。我无法更改存储过程 存储过程结果集1 column a | column b | coulmn c 存储过程结果集2 column x | column y 我正在做的是 DECLARE @ResultSet1Table TABLE ( column a ,column b

我有一个存储过程,返回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
以及接收错误消息

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


由于第二个结果集。

好的,这有点像黑客:

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

我想我有一份合理的工作。只需添加列来标识每个结果集。然后用查询将它们分开。请查看:

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 ='!'
第2组的结果:

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

我以前已经调查过了,我认为没有办法。我希望有人能给出一个让我看起来像个白痴的答案。你使用的是哪个版本的sql server?为什么不声明两个表变量,然后合并它们?我有一个不错的解决方法,假设你可以稍微修改存储过程
col1 col2 col3
---- ---- ----
X    Y    !