当前位置: 首页 > 面试题库 >

存储过程返回多个结果集

濮阳君浩
2023-03-14
问题内容

我需要一个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(默认值)之间进行选择,后者将仅发送不重复的行。



 类似资料:
  • 问题内容: 我有一个存储过程,它检查用户是否已经存在,无论用于电子邮件的输入是什么,它随数据库的第一行一起返回。如果我手动运行select语句,我将得到正确的结果。有什么建议吗? 问题答案: 您的问题无疑在这里: 白衣 您的参数名称与列名称相同。这 可 实际工作,但规则使它这样做可能是怪异。(我认为,如果您更改引号,它可能会起作用)。 但是实际上,您应该做的是将参数重命名为其他名称:

  • 我正在使用spring数据JPA存储库来调用存储过程。就好像在整个应用程序中,我们对存储过程有严格的依赖性一样,我必须使用非实体存储过程调用。以下是我选择的称呼方式: 它适用于存储过程返回单个结果集的所有情况。 但是它不适用于返回多个结果集的存储过程。它只返回第一个结果集,不给出任何错误。 在我们的项目中,我们有spring-boot-starter-data-jpa版本1.5.8和hiberna

  • 问题内容: 我正在调用一个Sybase存储过程,该存储过程通过JDBC返回多个结果集。我需要获取一个具有名为“ Result”的列的特定结果集,这是我的代码: 这里发生的是返回很多空结果集,直到达到目标结果集为止。我不能用作循环条件,因为它对空结果集返回false。 我放置了一个固定数字以结束循环,条件是没有返回所需的结果集,以防止其进入无限循环。它工作正常,但我认为这是不对的。 我认为从Syba

  • 问题内容: 我正在使用Spring的JdbcTemplate和StoredProcedure类。我无法让存储过程类为我工作。 我在oracle数据库上有一个存储过程。它的签名是 哪里 我创建了以下存储过程类以从oracle过程获取信息 我在我的一个DAO类中的一种方法中调用此方法 但是,地图的大小始终为0,因此没有任何结果。我知道数据库中有符合我输入条件的行。我也有用于与oracle存储的proc

  • 问题内容: 由于某些奇怪的原因,我无法从Python测试应用程序中的callproc调用中获得结果。MqSQL 5.2.47中的存储过程如下所示: 现在,在Python 3.3中使用PyCharm时,在调用此存储过程时似乎什么也找不到。这段代码为我提供了预期的结果: 但是这段代码带有cursor.fetchall()或cursor.fetchone()… …返回“ mysql.connector.

  • 问题内容: 寻找关于获取返回值和结果集的最干净方法的建议(不将引用的参数传递给存储的proc)。 MY存储的proc具有返回值以显示错误等,并且它们以select语句结尾以获取信息。使用常规命令,我将创建一个包含返回值的输出参数。我无法更改数据库中存储的proc,因此除了返回值之外,我无法传递其他输出参数。 想法?? 问题答案: 在LINQ to SQL DataContext设计器中通过从服务器