在使用JDBC调用SQLServer执行Store Procedure时,遇到以下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement(SQLServerStatement.java:783)
at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtExecCmd.doExecute(SQLServerStatement.java:676)
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.SQLServerStatement.executeQuery(SQLServerStatement.java:611)
at weblogic.jdbc.wrapper.Statement.executeQuery(Statement.java:480)
分析原因:是因为执行过程时,SQLServer 会返回数据影响行数(如select into #temp),如下图。影响行数会先于结果集返回,从而导致JDBC无法获取结果集,抛出异常。
解决方法:在存储过程首行加上 SET NOCOUNT ON
SET NOCOUNT { ON | OFF } 的使用:
使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息
语法:SET NOCOUNT { ON | OFF }
默认情况下为 OFF
当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。
当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。
如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。
SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
注释当SET NOCOUNT 为ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。当SET NOCOUNT 为OFF 时,返回计数。 ... 结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上SET NOCOUNT OFF这样的话,以达到优化 ...
相关推荐
### SQL Server 2008 开发系列知识点详解 #### 一、索引新特点 在SQL Server 2008中,索引有了新的改进和特性,这其中包括了筛选索引的应用。筛选索引是一种特殊的非聚集索引,允许在创建索引时指定一个过滤条件,...
SET NOCOUNT ON; UPDATE inserted SET employee_id = NEXT VALUE FOR employee_seq; END; ``` 可以看到,Oracle的PL/SQL触发器和SqlServer的Transact-SQL触发器语法有所不同。 四、迁移策略 了解了Oracle和Sql...
在SQL Server中,存储过程是预编译的SQL语句集合,它们封装了特定的数据库操作,提高了代码的重用性和执行效率。当涉及到处理多个值时,我们常常会遇到如何将这些值作为参数传递给存储过程的问题。本文将探讨在SQL ...
SQL Server 执行缓存优化之内存占用 SQL Server 的内存占用是一个常见的问题,许多开发者和dba 都会遇到这种问题。解决这个问题的关键是理解 SQL Server 的内存占用结构和执行缓存的优化方法。在这篇文章中,我们将...
### 最简单的SQL Server数据库存储过程分页 #### 知识点概述 在处理大量数据时,分页查询是一项常见的需求。传统的T-SQL分页方法可能会导致性能问题,尤其是在面对百万级别的数据集时。本文介绍一种简单且高效的...
SET NOCOUNT ON; DECLARE @ServiceUrl AS VARCHAR(1000); DECLARE @UrlAddress VARCHAR(500); DECLARE @Result VARCHAR(1000); DECLARE @Object INT; DECLARE @ResponseText VARCHAR(8000); -- WebService...
SET NOCOUNT ON; IF EXISTS (select UserID from BookUser Where UserName = @UserName) RETURN 0; ELSE BEGIN INSERT INTO BookUser(UserName, Title, Guid, BirthDate, Description, Photo, Other) VALUES ...
SQL Server 数据库中处理空值时常见问题 数据完整性是任何数据库系统要保证的重点。不管系统计划得有多好,空数据值的问题总是存在。本文探讨了在 SQL Server 中处理这些值时涉及的 3 个问题:计数、使用空表值以及...
- **自定义日志大小**:通过T-SQL脚本动态调整日志文件大小,例如SET NOCOUNT ON,然后使用DECLARE语句设置逻辑文件名、最大时间限制和新的日志文件大小。 了解并掌握这些SQL Server实用技巧,可以帮助你更有效地...
* SET NOCOUNT ON 语句:使用 SET NOCOUNT ON 语句来提高查询性能。 * 模糊查询 Like 语句:使用模糊查询 Like 语句来提高查询性能。 * 不要在 Where 子句关联字段上使用函数:避免在 Where 子句关联字段上使用函数...
SET NOCOUNT ON; SELECT * FROM YourTable ORDER BY SomeColumn OFFSET (@pageNumber - 1) * @pageSize ROWS FETCH NEXT @pageSize ROWS ONLY; END ``` 存储过程的优点在于,它可以封装复杂的逻辑,使得...
SET NOCOUNT ON IF USER_ID(@old) IS NULL BEGIN RAISERROR ('The @old passed does not exist in the database', 16, 1) RETURN END IF USER_ID(@new) IS NULL BEGIN RAISERROR ('The @new passed does ...
- 如何使用`SET ANSI_NULLS OFF`、`SET NOCOUNT ON`等语句来优化查询性能。 - 如何使用`SET LANGUAGE 'SimplifiedChinese'`设置查询结果的语言环境。 - 如何使用游标来逐行处理查询结果。 综上所述,本文提供的SQL...
### SQL Server 2005 分页显示存储过程 #### 背景介绍 在数据库应用开发中,分页查询是非常常见的需求之一。对于大型数据集来说,如果一次性加载所有数据到前端展示,不仅会增加服务器负担,还会影响用户体验。因此...
SET NOCOUNT ON; DECLARE @p1 INT; DECLARE @CurrentPage INT; SET @CurrentPage = 0; DECLARE @RowCount INT; SET @RowCount = 0; DECLARE @PageCount INT; SET @PageCount = 0; EXEC sp_cursoropen @...
CREATE PROCEDURE [dbo] [sys viewTableSpace] AS BEGIN SET NOCOUNT ON; CREATE TABLE [dbo] #tableinfo 表名 [varchar] 50 COLLATE Chinese PRC CI AS NULL 记录数 [int] NULL
根据提供的文件信息,我们可以深入分析并提取出与“SQL Server 表数据导出脚本”相关的几个关键知识点。 ### 知识点一:SQL Server 存储过程的创建与删除 在给定的部分内容中,首先出现的是一个存储过程的创建逻辑...
### 海量数据分页在SQL Server中的实现与优化 #### 概述 在Web应用程序开发中,分页浏览是一项非常重要的功能。特别是在处理大量数据时,如何高效地实现分页变得尤为关键。传统的ADO记录集分页法因其内存占用高、...
SET NOCOUNT ON; -- 初始化用于构建动态SQL的变量 DECLARE @sqlStr VARCHAR(4000); DECLARE @sqlStr1 VARCHAR(4000); DECLARE @sqlStr2 VARCHAR(4000); -- 构建基础SQL语句 SELECT @sqlStr = 'SELECT ''...
SET NOCOUNT ON; DECLARE @p1 int; DECLARE @currentPage int; SET @currentPage = 0; DECLARE @RowCount int; SET @RowCount = 0; DECLARE @PageCount int; SET @PageCount = 0; EXEC sp_cursoropen @p1 OUTPUT...