Sql 存储过程返回多个结果集

Sql 存储过程返回多个结果集,sql,sql-server,sql-server-2005,stored-procedures,syntax,Sql,Sql Server,Sql Server 2005,Stored Procedures,Syntax,我需要一个SP来返回多组结果。第二组结果将基于第一组结果的一列 因此: 如何使用我的SP返回@myTable1和@myTable2?这个语法是否正确 抱歉,我还是SQL的新手 编辑: 所以,我在下面代码的最后一行得到一个错误,它说:必须声明标量变量@myTable1 declare @myTable1 table(field0 int,field1 dateTime) insert into @myTable1 select top 1 field0, field1 from someTab

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

因此:

如何使用我的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
如果我高亮显示并运行代码直到第二次选择*它工作正常。。。 当我突出显示其余部分时,它的行为就像第一个变量不存在一样

编辑2: 解决了那个问题。谢谢各位

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)

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

SELECT * FROM @myTable1
SELECT * FROM @myTable2

这将返回两个结果集。

您几乎只需选择两个结果集

SELECT * FROM @myTable1
SELECT * FROM @myTable2
但是,一些工具会隐藏一些结果,例如pgAdmin只显示最后一个结果,而一些工具对获取下一个结果集有某种要求,例如NET的IDataReader将不允许您从第二个结果集读取结果,直到您调用NextResult

编辑:

在这种情况下,由于两个结果的类型匹配,另一种选择是将它们合并到一个结果集中:

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

您还可以在UNION ALL或UNION DISTINCT(默认值)之间进行选择,后者只发送不重复的行。

很好,我将很快尝试此操作:请记住,您实际上会得到三个结果集,因为在OP中代码末尾的select中似乎有一个结果集。这不起作用。。。我收到一条错误消息,在执行where子句where@myTable1.field0=@myTable2.field0时必须声明标量变量@myTable1。有什么想法吗?很好!我没有解决这个问题,因为他没有提到调用应用程序。@JNK,lol这正是我提到它的原因,我想知道他们为什么在尝试时遇到问题,我想知道他们是否已经做得很好了,但是他们的工具对他们隐藏了它。这个查询的结果将以HTML格式从C应用程序通过电子邮件发送。。。这种方法仍然有效吗?我没有深入研究调用SP的应用程序,我只知道它可以调用SP来获得一些结果,然后另一个程序将通过电子邮件发送结果。这取决于应用程序在获得结果时如何处理结果。.NET使用查询结果最常见的行为是只使用第一个resultset,尽管它可能调用NextResult来获取所有结果。如果您无法更改应用程序,并且两个结果集的类型匹配,就像您在问题中所做的那样,您可以将它们组合成一个结果集。我在我的答案中添加了一些代码,很酷。谢谢你的建议和有用的代码。我需要查看调用该过程的代码,看看它对结果做了什么。我以前应该问过,但是您使用的是什么RDBMS?如果在同一语句中没有DECLARE@Mytable1,它将不起作用。如果只突出显示最后一部分,则声明不在该查询中。这些变量只适用于一个查询,不会持久化。
SELECT field0, field1 from @myTable1
UNION
SELECT field0, field3 from @myTable2