如果存储过程在 SQL Server 2005 上的选择之前进行更新,则没有结果集

Posted

技术标签:

【中文标题】如果存储过程在 SQL Server 2005 上的选择之前进行更新,则没有结果集【英文标题】:No resultset if the store procedures does an update before the select on MSSQL server 2005 【发布时间】:2011-06-16 03:12:55 【问题描述】:

如果我在存储过程中选择之前进行更新,是否有人知道为什么我不会得到结果集。我正在运行 MSSQL server 2005 和最新的 Microsoft JDBC 驱动程序。

相关java代码:

CallableStatement cstmt = con.prepareCall("call dbo.sp_groups_select");
if (cstmt.execute()) 
    while (cstmt.getResultSet().next())

如果存储过程如下所示,则不会获得结果集:

CREATE PROCEDURE [dbo].[sp_groups_select] AS
update Computers set ComputerName='Foo'  where ComputerName='bar';
select * from Computers;

但如果看起来像这样,我确实会得到一个结果集

CREATE PROCEDURE [dbo].[sp_groups_select] AS
select * from Computers;
update Computers set ComputerName='Foo'  where ComputerName='bar';

【问题讨论】:

你是直接在数据库上运行的吗? (尝试查看这是 SQL-Server 问题还是 Java) 【参考方案1】:

可能是因为你需要SET NOCOUNT ON

(x rows affected) 等效项在客户端中作为结果集进行处理,从而将cstmt.getResultSet().next() bollixs 处理

我关于SET NOCOUNT ON的问题无耻插入

【讨论】:

啊,就是这样,现在可以了 @gbn 我请你喝一杯。在过去的四个小时里,DBA 先生一直在努力解决这个问题

以上是关于如果存储过程在 SQL Server 2005 上的选择之前进行更新,则没有结果集的主要内容,如果未能解决你的问题,请参考以下文章

使用存储过程将记录从 SQL Server 复制到 SQL Server (2005)

MS SQL Server 2005 - 存储过程“自发中断”

SQL Server 2005 事务复制无法发布包含索引创建的存储过程

从SQL Server 2005存储过程到FTP的最佳做法是什么?

存储过程系列之调试存储过程 SQL Server 2005

存储过程系列之调试存储过程 SQL Server 2005