sql-server - jdbc SQL错误: statement did not return a result set

标签 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 = '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保存表'table1'的选择结果

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

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

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

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

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

statement did not return a resultset

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

请问有什么办法可以解决这个问题吗?

最佳答案

您的 [p2] 存储过程需要在开头包含 SET NOCOUNT ON 以抑制“n 行受影响”计数,这样 JDBC 就不会混淆为它应该放入结果集中的内容:

CREATE PROCEDURE p2
AS

SET NOCOUNT ON;

declare @t1 table(
    ref varchar(20)
)

-- ... and so on

有关 SET NOCOUNT 的更多信息,请参阅

SET NOCOUNT (Transact-SQL)

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

How to get everything back from a stored procedure using JDBC

关于sql-server - jdbc SQL错误: statement did not return a result set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24428928/

相关文章:

sql-server - 存储过程错误附近的语法不正确

java - 如何通过jdbc将utf8存储到mysql 5.X

sql-server - VARCHAR 列上的 WHERE 子句似乎作为 LIKE 操作

c# - 使用 @@TRANCOUNT 有用吗?

c# - 使用大型 CLOB 从 C# 调用存储过程时出现问题

java - JDBC 类路径不工作

java - com.microsoft.sqlserver.jdbc.SQLServerException : The server version is not supported. 目标服务器必须是SQL Server 2000或更高版本

sql - 需要自助加入方面的帮助

c++ - Qt如何打开SQL Compact Server文件.sdf

mysql - 如何在 MySQL 中使用变量