我正在处理涉及大量结构更改的脚本,并且喜欢在处理所有需要更改的内容时返回到“基本”条件,因此我将更改包含在开始/回滚事务中。
如果没有错误,这工作得很好,但是当我犯了一个错误(试图删除一个不存在的列或具有 FK 约束等)时,回滚不起作用。因此,我用 sp_rename 重命名的对象或我删除的列的名称错误/不存在。
假设这是有记录的/正确的行为,它在哪里记录?可能只是我的眼睛呆滞了……但我不记得/找不到任何说明失败导致提交的内容。
我正在处理涉及大量结构更改的脚本,并且喜欢在处理所有需要更改的内容时返回到“基本”条件,因此我将更改包含在开始/回滚事务中。
如果没有错误,这工作得很好,但是当我犯了一个错误(试图删除一个不存在的列或具有 FK 约束等)时,回滚不起作用。因此,我用 sp_rename 重命名的对象或我删除的列的名称错误/不存在。
假设这是有记录的/正确的行为,它在哪里记录?可能只是我的眼睛呆滞了……但我不记得/找不到任何说明失败导致提交的内容。
SQL Server 不会自动提交显式事务。
在您的情况下可能发生的情况是事务被中止并回滚,但您的脚本继续执行,在没有包装事务的情况下执行其余部分。如果您
GO
的脚本中有语句,这种情况尤其可能发生。要实现跨批处理错误处理,您可以执行以下操作: