我需要一个 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 ALL
或 UNION DISTINCT
(默认)后者只会发送不重复的行。
关于sql - 存储过程返回多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876146/