我在存储过程中写了一个游标,基本上是这样的:
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循环中,我获得了外键冲突的一个Insert语句的异常。所以我修复了它,但是在我尝试运行我的应用程序之后这个异常,它就无法运行最简单的查询而且我不断获得Timeout expired
。只有在我重新启动我的Sql Server服务之后,似乎才能正常启动。
我的猜测是CLOSE和DEALLOCATE语句在我遇到异常后没有运行。如果出现这种情况我该怎么办?如果在生产过程中发生这种情况,我会感到害怕。我会像一块土豆一样被砸碎。
答案 0 :(得分:0)
我不确定,你的代码看起来如何,但如果人们有异常处理错误,并且与数据库的连接仍然存在,人们通常会得到这种行为。
如果这两个命令没有运行,您应该只从此代码中获得以下异常: 通过创作: 名为“curr”的光标已存在。
并通过开幕式: 光标已经打开。
我认为你应该使数据库级别的异常处理更加安全。