gpt4 book ai didi

sql-server - 错误回滚事务

转载 作者:行者123 更新时间:2023-12-04 06:06:54 30 4
gpt4 key购买 nike

我有一个很大的生成脚本。它有多个批次( GO 语句)。第一行是 BEGIN TRAN
如果在执行过程中发生任何错误,请使用 RAISERROR 提出自己,或者是SQL Server引发的,我想回滚事务。我希望脚本继续执行直到最后,然后回滚,而不是在发生任何错误时立即中止执行。

正在检查 @@error <> 0在脚本的末尾似乎还不够,因为如果脚本中的最后一条语句成功,@@error 将为 0,即使之前的语句失败。

我不能申报 @rollback BIT一开始因为脚本被分割成多个批次,所以变量超出了范围。

我明白 RAISERROR并不意味着我的交易将被回滚。

关于以 SQL 2000 兼容方式实现这一点的最佳方式有什么建议吗?

最佳答案

您可以随时使用 SET CONTEXT_INFO 传递“带外”信息,稍后使用 CONTEXT_INFO() 阅读它.如果发生错误,请将上下文信息设置为您在提交前检查的值。

这回答了你如何做的问题,但我真的必须首先表达我对为什么要这样做的怀疑。因为许多错误无论如何都会中止事务,因此您可能会盲目地继续相信继续和回滚是安全的,但发现在异常提交后没有任何回滚和所有错误的脚本。其次,对于异常比不中止事务,做任何工作只回滚它还是很值得怀疑的。你的要求是如此与众不同,以至于我不得不怀疑你是否真的了解你所做的一切的含义。

关于sql-server - 错误回滚事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252265/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com