Sql server jdbc sql错误:语句未返回结果集

Sql server jdbc sql错误:语句未返回结果集,sql-server,stored-procedures,jdbc,Sql Server,Stored Procedures,Jdbc,我有两个存储过程,如下所示: create stored procedure p1 as select * from table1 where datediff(day, table1.[date], getdate()) create stored procedure p2 as declare @t1 table( ref varchar(20) ) insert into @t1 select * from table1 where ref =

我有两个存储过程,如下所示:

create stored procedure p1
as
    select * from table1 where datediff(day, table1.[date], getdate())

create stored procedure p2
as
   declare @t1 table(
     ref varchar(20)
   )
      insert into @t1 select * from table1 where ref = 'some ref'
      declare @t2 table(
      fname varchar(20),
      lname varchar(20),
      email varchar(1000)
  )
  declare @len int = (select count(ref) from @t1)
  while @len > 0
  begin
  declare @value varchar(20)  = (select top 1 ref from @t1)
  insert into @t2 select * from table2 where ref = @ref
  delete from @t1
  where ref = @value
  set @len = (select count(ref) from @t1)
  end
  select * from @t2
Java代码

 ....
 String query = "Execute [p2]";

 try(CallableStatement cstmt = conn.prepareCall(query);
     ResultSet rs = cstmt.executeQuery()){
        ... some code
    }
表格变量@t1 hold select来自表格“table1”的结果

变量@len保存@t1中的行数

在while循环中使用@len>0作为条件,我想从另一个表“table2”中选择记录表变量@t2保存“table2”中的选择记录

delete语句从@t1中删除值 @len设置为@t1中的新行数 最后一条语句返回@t2中存储的所有记录

第一个过程工作正常,但第二个过程仅在SQL Server中工作

我在java应用程序中收到一条错误消息

语句未返回结果集

我希望它返回一个结果集,其中包含我在 查询结束


有没有办法解决这个问题?

您的[p2]存储过程需要在开始的右侧包含SET NOCOUNT,以抑制受影响的n行计数,这样JDBC就不会对应该将什么放入结果集中感到困惑:

创建过程p2 像 不计数; 声明@t1表 参考varchar20 - ... 等等 有关SET-NOCOUNT的更多信息,请参阅

有关存储过程调用返回内容的详细信息,请参阅


使用方法execute而不是executeQuery。

对于出现错误的任何人:org.pentaho.di.core.exception.KettleDatabaseException:语句未返回结果集。从PDI来看,这个答案也解决了使用JDBCNative驱动程序时的问题。