如何组合来自两个存储过程调用的结果集?

sha*_*oth 8 sql t-sql sql-server union stored-procedures

我有一个以下存储过程

CREATE PROCEDURE [dbo].[MyStored]
   @state int
AS
   SELECT blahblahblah WHERE StoredState=@state LotsOfJoinsFollow;
RETURN 0
Run Code Online (Sandbox Code Playgroud)

我想调用存储过程@state感01并请有两个通话联合返回的结果集UNION的语义,使我有一个从第一呼叫和第二呼叫已排了新的结果集.

像(假想的SQL):

(EXEC MyStored 0) UNION (EXEC MyStored 1);
Run Code Online (Sandbox Code Playgroud)

我如何实现这一目标?

bri*_*ian 14

这可能过分简化了问题,但如果您可以控制sp,只需使用in而不是=:

CREATE PROCEDURE [dbo].[MyStored]
AS
   SELECT blahblahblah WHERE StoredState IN (0,1) LotsOfJoinsFollow;
RETURN 0
Run Code Online (Sandbox Code Playgroud)

如果这不是一个选项,只需将两个sproc调用的结果推送到临时表:

/*Create a table with the same columns that the sproc returns*/
CREATE TABLE #tempblahblah(blahblahblah NVARCHAR(50))

INSERT #tempblahblah ( blahblahblah )
 EXEC MyStored 0

INSERT #tempblahblah ( blahblahblah )
 EXEC MyStored 1

SELECT * FROM #tempblahblah
Run Code Online (Sandbox Code Playgroud)


ady*_*suf 5

create table #table ( 
    .....
)

insert into #table exec MyStored 0
insert into #table exec MyStored 1

select * from #table

drop table #table
Run Code Online (Sandbox Code Playgroud)