当前位置: 首页 > 面试题库 >

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

陆宇航
2023-03-14
问题内容

是否有人知道如果在存储过程中选择之前进行更新,为什么我不会得到结果集?我正在运行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';

问题答案:

可能是因为您需要 SET NOCOUNT ON

(x rows affected)等效被处理为在客户端一个结果,这bollixescstmt.getResultSet().next()

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



 类似资料:
  • 问题内容: 我有一个带有2个表的数据库,如下所示: 列是,并且是 和 在申请表中,我有2个编辑框,名称分别为和 如果用户像电子邮件一样插入一个新的负责人姓名, 那么在保存表格的过程中,我想将新的负责人姓名插入表中,请插入最后一个并将其更新为。 如果用户保持名称,但它更新电子邮件一样,然后我想在从1 =使用新的电子邮件地址和他们(其余和)保持不变。 如果负责人的名称相同,我想保留from表的原始引用

  • 问题内容: 在很多情况下,您需要根据某些条件执行INSERT,UPDATE或DELETE语句。我的问题是,对查询性能的影响是否在命令前添加了IF EXISTS。 例子 INSERT或DELETE呢? 问题答案: 我不太确定,但是我得到的印象是,这个问题实际上是关于upsert的,它是以下原子操作: 如果该行同时存在于源和目标中,则为目标。 如果该行仅存在于源中,则该行进入目标;否则,该行进入目标。

  • 问题内容: 我在存储过程中有一条更新语句,该语句通常如下所示: 是否只有当变量不为null或值-1时才触发更新语句的好方法? 类似于一个问题。 太感谢了。 问题答案: 使用T-SQL : 看一下MSDN文档。

  • 问题内容: 我有一个带有以下参数的T-SQL存储过程 我想知道是否可以通过as参数传递结果: 我尝试了类似的方法,但是它不起作用。 问题答案: 您在示例中编写的SELECT查询可能会带回多行(您的SELECT不具有WHERE子句或TOP(n))。如果您打算让过程使用一组“表格”参数,那么从SQL Server 2008开始,您可以使用表值参数。 这涉及到创建用户定义的表表,这无疑将意味着调整存储过

  • 问题内容: 我已经查看了与该问题相关的Stack Overflow上的其他问题,但是似乎没有一个问题能清楚地回答这个问题。 我们有一个名为sp_who2的系统存储过程,该过程为服务器上所有正在运行的进程返回信息的结果集。我想过滤存储过程返回的数据;从概念上讲,我可能会这样做: 但是,该方法不起作用。有什么好的做法可以实现查询存储过程的返回数据的目标,最好无需查看原始存储过程的代码并对其进行修改。

  • 问题内容: 基本上我想要的是以下代码的工作版本: 错误: 原因: 根据MySQL Doc: 只要服务器运行,InnoDB就会使用内存中的自动增量计数器。如前所述,当服务器停止并重新启动时,InnoDB将为该表的第一个INSERT重新初始化每个表的计数器。 这意味着每当我重新启动服务器时,我的auto_increment值都将设置为最小。 我有一个叫的表,另一个叫的表。他们两个都有共享的列。表格中的