首页 > 解决方案 > 执行 SP_Open 游标导致 SMSS 出现严重错误

问题描述

我们的程序执行一个存储过程 VIA SP_Opencursor,我设法通过跟踪提取了确切的调用,当直接在 SMSS 中运行代码时,我们得到一个严重的错误

declare @p1 int
set @p1=0
declare @p3 int
set @p3=16388
declare @p4 int
set @p4=8196
declare @p5 int
set @p5=0
exec sp_cursoropen @p1 output,N' EXEC [dbo].[EventSearchSP] ''hip''  ',@p3 output,@p4 output,@p5 output
select @p1, @p3, @p4, @p5

运行上述代码时,我们得到以下错误:

Executing SQL directly; no cursor.
Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command.  The results, if any, should be discarded.

这段代码过去可以工作,但直到最近才出现故障。它在我们实例上的所有数据库中都失败了(超过 100 个)

在其他服务器上运行代码时,该过程正确执行并且不会失败。

存储过程的实际数据是相当通用的,只有一列数字。我不相信它是存储过程本身,因为从客户端程序执行任何存储过程时都会发生此问题

我很快就没有尝试解决这个问题的想法,有谁知道是什么导致这个错误突然开始,它曾经在哪里工作正常?

标签: tsqlsql-server-2008ssms

解决方案


我们已经找到了问题,如果有人知道为什么会出现问题,我很想知道,这样我就可以找到解决方法。

经过研究,我们最近在 SQL 服务器上的连接中设置了 XACT_ABORT ON 功能,它被普遍接受为最佳实践。但是,启用此设置后,我们会收到上述错误,再次关闭该功能后,该程序开始像以前一样工作。

不幸的是,我们打开 XACT_ABORT 是为了解决另一个问题,我们现在需要找到另一个解决方案!


推荐阅读