使用临时表拼接两张表数据,并查询结果集,存储过程代码如下:
ALTER PROCEDURE dead_proc AS
BEGIN
SELECT * INTO #deadTemp FROM deadNum;
INSERT into #deadTemp SELECT * FROM deadNum2;
SELECT * FROM #deadTemp ;
END;java调用该存储过程,代码如下(略去数据库连接部分):
conn = ConnUtils.getConnection();
statement = conn.prepareCall("{call dead_proc}");
ResultSet resultSet=statement.executeQuery();
int ID,num;
Date time;
System.out.println("数据库内容:");
while (resultSet!=null&&resultSet.next()){
ID=resultSet.getInt("ID");
num=resultSet.getInt("num");
time=resultSet.getDate("time");
System.out.println(ID+" "+num+" "+time);
}
运行后报出错误信息
com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:394)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)
at ProceTest.main(ProceTest.java:20)在存储过程首行添加
set nocount on即可解决问题
具体set nocount on作用可参考set nocount on作用
本文介绍了在使用JDBC连接SQL Server执行存储过程时遇到'该语句没有返回结果集'的错误,通过分析存储过程代码和应用set nocount on语句来解决问题。存储过程涉及到临时表和两张表的数据拼接查询。

3771

被折叠的 条评论
为什么被折叠?



