我有两个存储过程,如下所示:
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 的更多信息,请参阅
有关存储过程调用返回的具体内容的详细信息,请参阅
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/