存储过程返回多个结果集

时间:2010-10-06 19:25:17

标签: sql sql-server sql-server-2005 stored-procedures syntax

我需要一个SP来返回多组结果。第二组结果将基于第一组结果的一列。

所以:

declare @myTable1 table(field0 int,field1 varchar(255))
insert into @myTable1 select top 1 field0, field1 from table1

declare @myTable2 table(field0 int,field3 varchar(255))
insert into @myTable2 
select field0, field3 from table2 
where @myTable1.field0 = @myTable2.field0

如何用我的SP返回@ myTable1和@ myTable2?这种语法是否正确?

道歉,我还是SQL的新手...

修改

所以,我在下面的代码的最后一行出现错误:“必须声明标量变量”@ myTable1“”

declare @myTable1 table(field0 int,field1 dateTime)
insert into @myTable1 
select top 1 field0, field1 
from someTable1 m
where m.field4 > 6/29/2009

select * from @myTable1
select *
from someTable2 m2
where m2.field0 = @myTable1.field0

如果我突出显示并运行代码直到第二个select *它工作正常... 当我突出显示其余部分时,它就像第一个变量不存在一样...

EDIT2: 想出问题了。谢谢你们。

declare @myTable1 table(field0 int,field1 dateTime)
insert into @myTable1 
select top 1 field0, field1 
from someTable1 m
where m.field4 > 6/29/2009

select * from @myTable1
select *
from someTable2 m2
where m2.field0 = (select field0 from @myTable1)

2 个答案:

答案 0 :(得分:20)

您只需选择两个结果集

SELECT * FROM @myTable1
SELECT * FROM @myTable2

但是,有些工具会隐藏一些结果(例如pgAdmin只显示最后一个),而某些工具有一些要求进入下一个结果集(例如.NET的IDataReader不允许你Read()从第二个结果集开始,直到你调用NextResult())。

编辑:

在这种情况下的另一种选择,因为两个结果的类型匹配,就是将它们组合成一个结果集:

SELECT field0, field1 from @myTable1
UNION
SELECT field0, field3 from @myTable2

您还可以选择UNION ALLUNION DISTINCT(默认值),后者只会发送不重复的行。

答案 1 :(得分:5)

在存储过程结束时,输入:

SELECT * FROM @myTable1
SELECT * FROM @myTable2

这将返回2个结果集。