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

3

我有一个返回两个结果集的存储过程。我试图调用这个存储过程并将第一个结果集的值插入到一个临时表中,但是由于我返回了两个结果集,所以我无法做到这一点。

是否有一种方法可以只返回一个结果集或将它们分别返回到不同的临时表中。我无法更改存储过程。

存储过程结果集1

column a | column b | coulmn c 

存储过程结果集2

column x | column y

What I am doing is

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

INSERT INTO @ResultSet1Table 
   EXEC StoredProc

当出现以下错误信息时:

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

通常是由于第二个结果集引起的。


1
我之前研究过这个问题,但我认为没有解决的方法。不过,我希望有人能提供一个答案,让我看起来像个傻瓜。 - TZHX
你正在使用哪个版本的SQL Server? - flo
为什么不声明2个表变量,然后将它们合并? - Giorgi Nakeuri
我有一个不错的解决方案,假设您可以稍微修改存储过程。 - Stephan
2个回答

2

好的,这有点像是一个hack:

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

0

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

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 ='!'

第一组结果:

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

第二组的结果:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接