当前位置: 首页 > 知识库问答 >
问题:

当sql server 2005中的try catch中捕获错误时,如何防止事务回滚

卢黎明
2023-03-14

我有一个记录表Table1

Table1
-------------------------------
ID  F1
-------------------------------
01  1
02  OK
03  52
04  53
05  Null
------------------------------

这里,我想将F1 Varchar的数据类型更改为Decimal(3,0);然后,我创建一个具有新结构的新表。

我想通过显式地将varchar转换为decimal,将旧表的每个recod插入到new中。所以我在try catch块中写了这个命令。如果产生了错误,那么在catch块中我可以用它的默认值填充它。但是整个工作是在begin transaction和commit transaction块之间执行的。因此,当在catch块中捕获到错误时,就不能执行进一步的工作,错误就发生了

无法提交当前事务,并且无法支持写入日志文件的操作。回滚事务。

如何防止此事务回滚,即使在try catch块中发生错误。

共有2个答案

勾海超
2023-03-14

不幸的是,这是不可能的SQL服务器。

任何错误都会导致事务失败,失败的事务不能提交,也不能展开到保存点。

唯一的解决方案是:使用另一个数据库引擎...

伯博
2023-03-14

你不能。您必须始终检查XACT州并采取相应措施:

不可提交事务和XACT_STATE
如果在TRY块中生成的错误导致当前事务的状态无效,则该事务被归类为不可提交事务。当错误发生在TRY块内时,通常在TRY块外结束事务的错误会导致事务进入不可提交状态。不可提交事务只能执行读取操作或ROLLBACK TRANSACTION。事务不能执行任何会生成写入操作或COMMIT TRANSACTION的Transact-SQL语句。如果事务被归类为不可提交事务,XACT_STATE函数将返回-1值。当批处理完成时,数据库引擎会回滚所有活动的不可提交事务。如果事务进入无法提交状态时没有发送错误消息,则当批处理完成时,将向客户端应用程序发送错误消息。这表明检测到无法提交的事务并回滚。

 类似资料:
  • 问题内容: 调用的方法: 1. Struts Action 2.服务类方法(由@Transactional注释) 3. Xfire Web服务调用 包括struts(DelegatingActionProxy)和事务在内的所有内容都使用Spring进行配置。 持久性是通过JPA / Hibernate完成的。 有时,Web服务将引发未经检查的异常。我捕获了此异常并抛出了一个已检查的异常。我不希望事

  • 我们的编写器设计用于将记录写入关系数据库。如果任何记录发生异常,Spring Batch将对区块中的每条记录执行回滚并重试写入操作。这导致发生SQL重复密钥异常,因为区块中先前处理的记录已成功写入数据库。 我们已经尝试使用noRetry()和noRollback(),明确指定不应该触发重试或回滚的异常列表。 根据Spring Batch在线留档noRollback()可用于防止在ItemWrite

  • 问题内容: 我正在使用PHP函数将数据从本地计算机发布到Web服务器。我的代码如下: 不幸的是,我无法捕获任何错误,例如404、500或网络故障。那么,我如何得知数据没有发布到远程或从远程检索呢? 问题答案: 您可以使用该功能检测是否有错误。例如:

  • 问题内容: Netbeans每15-30分钟显示一次“ ”。从我从Google那里学到的信息来看,这似乎与类加载器泄漏或内存泄漏有关。 不幸的是,我发现的所有建议都与应用程序服务器有关,并且我不知道将其应用于Netbeans。(我什至不确定这是同一个问题) 我的应用程序有问题吗?我如何找到来源? 问题答案: 这是因为常量类加载。 Java将类字节码和所有常量(例如,字符串常量)存储在默认情况下不会

  • 问题内容: 我在Python中构建了一个简短的url转换器引擎,并且看到大量的“管道破损”错误,并且很好奇在使用BaseHTTPServer类时如何最好地捕获它。这不是全部代码,但可以让您大致了解我目前正在做什么: 该代码本身运行良好,但是在生产中几乎立即开始引发错误: 这些错误的大部分似乎源于在调用send_header()方法时遇到的问题,其中我要写的是: 所以我很好奇在我的代码中尝试捕获此I

  • 我正在从可能被压缩的服务器下载内容,所以我使用了我在不同地方找到的样板: 问题是,如果HTTPS请求因网络错误而失败,我有时会引发以下异常: 该“错误”事件处理程序未捕获异常。那么我如何捕获它,以便能够正确地清理文件并知道如何重试?