2

我在一个存储过程中写了一个游标,基本上是这样的:

OPEN curr

    Fetch NEXT FROM curr into @ID, @IsCC, @JurisdictionID

    While @@FETCH_STATUS = 0
    Begin
        --Code for Update and Insert operations
         Fetch NEXT FROM curr into @ID, @IsCC, @JurisdictionID
    End

    CLOSE curr
    DEALLOCATE  curr

现在在 While 循环中,我为外键违规的插入语句之一获得了异常。所以我修复了它,但是在这个异常之后,当我尝试运行我的应用程序时,它甚至无法运行最简单的查询,而且我不断得到Timeout expired. 只有在我重新启动我的 Sql Server 服务之后,一切似乎才能正常启动。

我的猜测是语句 CLOSE 和 DEALLOCATE 在我遇到异常后没有运行。如果发生这种情况我该怎么办?我害怕如果在生产中发生这种情况我会像一块土豆一样被砸碎。

4

1 回答 1

0

我不确定,您的代码看起来如何,但是如果人们的异常处理不好,并且与数据库的连接仍然存在,通常人们会得到这种类型的行为。

如果这两个命令没有运行,您应该仅从此代码中获得以下异常: 通过创建:名称为“curr”的游标已存在。

并且通过开头:光标已经打开。

我认为您应该使数据库级别的异常处理更加安全。

于 2012-06-04T10:42:09.673 回答