bla*_*aze 5 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
Run Code Online (Sandbox Code Playgroud)
Java代码
....
String query = "Execute [p2]";
try(CallableStatement cstmt = conn.prepareCall(query);
ResultSet rs = cstmt.executeQuery()){
... some code
}
Run Code Online (Sandbox Code Playgroud)
表变量@ t1保存表'table1'的选择结果
变量@len保存@ t1中的行数
@len > 0在while循环中使用as条件,我想从另一个表'table2'中选择记录表变量@t2保存来自'table2'的选择记录
delete语句将@ t1 @len中的值设置为@ t1中的新行数,最后一个语句返回@ t2中存储的所有记录
第一个过程工作正常,但第二个过程仅适用于SQL Server.
我在我的java应用程序中收到此错误消息
语句没有返回结果集
我希望这返回一个结果集,其中包含我在查询结尾处的select语句.
请问有办法吗?
Gor*_*son 28
您的[p2]存储过程需要SET NOCOUNT ON在开头包含,以抑制" n行受影响"计数,这样JDBC就不会对应该放入ResultSet的内容感到困惑:
CREATE PROCEDURE p2
AS
SET NOCOUNT ON;
declare @t1 table(
ref varchar(20)
)
-- ... and so on
Run Code Online (Sandbox Code Playgroud)
有关SET NOCOUNT的更多信息,请参阅
有关从存储过程调用返回的精确内容的详细信息,请参阅