美文网首页
sql server一个完整的事务提交 和异常处理回滚 逻辑处理

sql server一个完整的事务提交 和异常处理回滚 逻辑处理

作者: 吉凶以情迁 | 来源:发表于2024-06-05 16:40 被阅读0次
BEGIN TRAN MyTransaction -- 开始事务

-- 创建保存点,命名该保存点为 SavePoint1
SAVE TRAN SavePoint1

-- 执行一些数据库操作
INSERT INTO Table1 (Column1, Column2) VALUES ('Value1', 'Value2')
UPDATE Table2 SET ColumnA = 'NewValue' WHERE ID = 123

-- 模拟一个可能出错的地方
DECLARE @ErrorOccurred BIT = 0
IF EXISTS(SELECT 1 FROM Table3 WHERE InvalidCondition = 1)
BEGIN
    SET @ErrorOccurred = 1
    PRINT 'An error condition was met. Rolling back to SavePoint1.'
    ROLLBACK TRAN SavePoint1 -- 回滚到保存点SavePoint1,撤销上面的UPDATE操作但保留INSERT
END

-- 如果没有错误,继续其他操作
IF @ErrorOccurred = 0
BEGIN
    -- 执行更多的数据库操作
    DELETE FROM Table4 WHERE ColumnB = 'Obsolete'
END

-- 根据情况提交或回滚事务
IF @ErrorOccurred = 0
BEGIN
    COMMIT TRAN MyTransaction -- 所有操作成功,提交事务
    PRINT 'Transaction committed successfully.'
END
ELSE
BEGIN
    ROLLBACK TRAN MyTransaction -- 发生错误,回滚整个事务
    PRINT 'Transaction rolled back due to error.'
END

其中save并不是提交,而是保存 一个点,而回滚则可以回滚事务点也可以回滚 保存点?

另外我发现 关于这个执行末尾穿透,需要直接return,否则会直接穿透到ErrTransHandle

    print ('---');
     SELECT @code=0,@msg='已经提交完成' 
     commit  tran tran_roll
     return     
   END

 ErrTransHandle:          
    SELECT @code=-1,@msg=  @msg+' 回滚了'
 rollback tran tran_roll           
ErrHandle:         
image.png

所以总结,
搞不懂咋回事不知道是我删了代码还是咋的,我发现丢失了一个提交事务和一个返回
因此导致数据提交还是被回滚了,所以没报错,如果 开始了事务没回滚也没进行提交,那也是会报错的,偏偏就出在我对语法不熟悉,就遇到这个问题,经过打印日志终于解决此问题。

不能调试的远程开发中,结合了打印加 存储转 sql 存储转 打印版本sql,各种方法便捷定位
甚至在执行存储的时候我弄了一个模拟执行语句的和设置的sql变量代码,方便直接粘贴到sql 中执行。
感兴趣的在vscode和搜索azud studio中搜索strore proc to sql

相关文章

网友评论

      本文标题:sql server一个完整的事务提交 和异常处理回滚 逻辑处理

      本文链接:https://www.haomeiwen.com/subject/dwiuqjtx.html