sql - 存储过程返回多个结果集

标签 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)

最佳答案

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

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 (默认)后者只会发送不重复的行。

关于sql - 存储过程返回多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876146/

相关文章:

sql-server-2005 - 撤消 SQL Server 数据库优化所做的更改

mysql - 如何搜索内容但跳过方括号内的内容?

sql - 如何计算包含列的非聚集索引的 Num_Key_Cols ?

sql-server - SQL Server - 何时使用聚集索引与非聚集索引?

sql-server - SQL Server columnstore 索引更新/插入存储过程

sql-server-2005 - SQL Server 2005 日期格式 [DD-Mon-YY hh :mm:ss]

sql-server-2005 - Sql 2005 CLR 集成 - 是否支持动态程序集加载?

sql - BigQuery : Converting key-value pairs in Array to columns

mysql - 如何从其他表中获取名称为 "same"的所有值的客户

sql-server - 与 SQL Server 2005 Enterprise 相比,SQL Server 2005 Express 中的数据库性能是否较慢?