`
joeblow
  • 浏览: 178548 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

不允许对具有不止一条 SELECT 语句的远程存储过程或存储过程使用服务器游标

    博客分类:
  • JEE
阅读更多
在一个SSH+SQL Server的项目中用sql-query的方式调用存储过程,如

  <sql-query name="view_custinfo" callable="true">
        <return class="fdm.pojos.CustInfo">
            <return-property name="FIntelId" column="FIntelId"/>
            <return-property name="FTYPE" column="FTYPE"/>
        </return>
        {call view_custinfo(:param1) } 
  </sql-query>      


这样调用:

Query q = this.getSession().getNamedQuery("view_custinfo");
q.setParameter("param1", "cust");
List list = q.list();


存储过程只是一个简单的select:

ALTER    PROCEDURE view_custinfo
   @table  varchar(12)
 AS
  Declare @SQL varchar(8000)
   select @SQL='select * from '+@table
  Exec(@SQL)


可是查询的时候会报错:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不允许对具有不止一条 SELECT 语句的远程存储过程或存储过程使用服务器游标。请使用默认结果集或客户端游标。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)


几经折腾后,发现原来是这样的原因:我在applicationContext.xml中配置的url是“jdbc:sqlserver://localhost:1433;databaseName=DEMO;selectMethod=cursor”,去掉这个selectMethod=cursor就行了;而这个参数是之前为了提高SQL Server的查询性能才设置的,唉,只好去掉这个参数先。。。







分享到:
评论

相关推荐

    存储过程教程

    存储过程存储在数据库服务器上,可以通过客户端应用程序远程调用来执行。 #### 二、存储过程的优点 - **模块化**:存储过程可以将复杂的业务逻辑分解成多个独立的部分,每个部分负责执行特定的功能。 - **可重用性...

    DB2使用经验积累

    - **使用临时表取代一条一条插入**:当需要插入大量数据时,使用临时表可以显著提高插入速度。 - **循环次数很多时注意减少执行语句**:通过减少循环体内的SQL语句执行次数来提高程序性能。 - **看程序执行时间及...

    DB2使用经验积累PDF

    - **查看各表对SP的影响(被哪些SP使用)**:通过检查存储过程的源代码或使用DBA工具来确定哪些表被特定的存储过程引用。 - **查看SP使用了哪些表**:同样地,可以通过检查存储过程的源代码来确定存储过程使用了哪些表...

    DB2使用经验积累及心得

    - **使用临时表取代一条一条插入**:提高数据导入效率。 - **循环次数很多时注意减少执行语句**:避免不必要的重复执行。 - **看程序执行时间及结果DB2BATCH**:使用DB2BATCH工具监测执行时间。 - **看程序或语句...

    牛新庄:DB2使用经验

    - **给SELECT语句指定隔离级别**:使用`WITH RSNAPSHOT`或`WITH UR`等选项指定查询的隔离级别,例如: ```sql SELECT * FROM table WITH (UR); ``` - **ATOMIC及NOT ATOMIC区别**:`ATOMIC`表示存储过程作为一个...

    DB2数据库使用经验积累

    ##### 5.8 使用临时表取代一条一条插入 对于大量数据的插入操作,使用临时表可以提高效率。 ##### 5.9 循环次数很多时注意减少执行语句 减少循环中的执行语句数量可以减少不必要的资源消耗。 ##### 5.10 看程序...

    10数据库原理与应用教程—SQLServer数据库__考试题目(10)-.docx

    4. **远程存储过程**:在远程服务器上执行的存储过程。 5. **扩展存储过程**:使用C/C++编写并通过DLL集成到SQL Server中的存储过程,可以执行复杂操作。 **触发器**: 1. **DML触发器**:当数据被插入、更新或删除...

    db2开发经验

    8. **使用临时表取代一条一条插入:** 使用临时表可以批量处理数据,提高插入效率。 9. **循环次数很多时注意减少执行语句:** 减少循环体内的执行语句数量可以显著提高性能。 10. **看程序执行时间及结果DB2BATCH:*...

    DB2数据库用户手册

    - **使用临时表取代一条一条插入**:当需要插入大量数据时,使用临时表进行批量插入可以大大提高性能。 - **循环次数很多时注意减少执行语句**:在循环体内减少不必要的SQL执行可以提高整体性能。 - **看程序执行...

    同步不同服务器数据库数据

    根据给定文件的信息,本文将详细解析如何在不同的服务器之间同步数据库数据,主要涉及的关键步骤包括:创建数据库链接(DBLink)、使用同义词访问远程表、构建存储过程实现数据同步以及设置定时任务来定期执行数据...

    达梦数据库_SQL语言手册

    - **10.5.3 游标变量**: 在存储过程中使用游标变量。 - **10.5.4 返回查询结果集**: 从存储过程中返回查询结果。 - **10.5.5 SQL语句应用举例**: 示例展示SQL语句的应用。 - **10.6 客户端存储模块**: 在客户端...

    DB2学习手册

    19. **给SELECT语句指定隔离级别:** 使用`WITH UR`或`WITH RS`来指定查询的隔离级别。 20. **ATOMIC及NOT ATOMIC区别:** `ATOMIC`表示整个事务要么全部提交要么全部回滚,而`NOT ATOMIC`则允许可串行化的事务。 ###...

    Oracle学习要点记录(包括DML\DDL等数据库管理语句)

    - 这个存储过程定义了一个游标`cur_so`,用于从`ic_saleout_h`表中检索前100条记录,并输出这些记录的`vBillCode`和`dBillDate`值。 通过以上详细介绍,我们可以看到Oracle数据库中涉及的各种重要概念和技术,这些...

    Oracle9i的init.ora参数中文说明

    说明: 用于指定数据库为远程 PL/SQL 存储的过程处理被依赖对象的方式。如果设置为 TIMESTAMP, 只有在服务器与本地时间戳相匹配的情况下, 才能执行该过程。如果设置为 SIGNATURE, 在签名安全的情况下即可执行该过程。...

    Informix 编程手册.pdf

    - **部署选项**:可以选择在本地或远程服务器上部署应用程序。 #### INFORMIX-4GL的处理逻辑 - **流程控制语句**: - 条件语句:IF-THEN-ELSE。 - 循环语句:DO-WHILE。 - 分支语句:CASE。 - **函数和过程**:...

    pymssql-2.1.4-cp35-cp35m-win_amd64.zip

    这里,`fetchall()`方法会获取所有查询结果,然后遍历并打印每一条记录。 5. **关闭游标和连接**: 在操作完成后,记得关闭游标和连接以释放资源: ```python cursor.close() conn.close() ``` **高级特性**...

    连接数据库

    2. **主机名/IP地址**:数据库服务器的网络位置,可能是本地机器(localhost)或远程服务器的IP地址。 3. **端口号**:数据库服务监听的网络端口,如MySQL默认的3306。 4. **数据库名称**:你要连接的具体数据库实例...

    Transact-sql 最常用全局变量

    - **描述**:返回当前连接上的任何打开游标发出的上一条游标 FETCH 语句的状态。 - **用途**:判断上一次游标操作是否成功。 #### 8. @@IDENTITY - **描述**:返回最后一次插入的标识值。 - **用途**:通常在插入...

Global site tag (gtag.js) - Google Analytics