zoukankan      html  css  js  c++  java
  • sql 关于dblink和多条update、insert事务回滚写法

    在存储过程的编写中难免会遇到调用同库他人的proc和跨库调用proc,还有一个proc中有多条对多表进行写入和修改的语句。那么就会用到tran。

    如果我们在不写try的情况下就要对每个insert,update的后面写上

    IF @@error <> 0
                    OR @@Rowcount = 0
                    BEGIN
                        ROLLBACK TRAN 
                    END    

    来确保所有语句的正常执行和有影响的行数。

    而在写了try的情况下,我们就可规范一下写法,利用RAISERROR

    DECLARE @Ret_Msg VARCHAR(200)
    DECLARE @Ret_Msg1 VARCHAR(200)
    DECLARE @nResult INT
    DECLARE @vcResult VARCHAR(200)
    BEGIN TRY
            BEGIN TRAN
                   UPDATE Table_a set a=1 WHERE b =1
                   IF @@Rowcount = 0
                   BEGIN
                        SET @Ret_Msg = '执行失败'
                        SET @Ret_Msg1 = 'Table_a 更新失败'
                        RAISERROR(@Ret_Msg1,16,1)
                   END
                   数据库.架构.proc 1,2, @nResult OUT, @vcResult OUT
                   IF @nResult <0
                   BEGIN
                        SET @Ret_Msg = @vcResult
                        SET @Ret_Msg1 = 'dbLink调用失败' + @vcResult
                        RAISERROR(@Ret_Msg1,16,1)
                   END
                   SELECT @Ret_Msg  as vcResult 
            COMMIT TRAN
    END TRY
    BEGIN CATCH
        IF @@tranCount > 0
                    ROLLBACK TRAN;
        SELECT  @Ret_Msg AS vcResult 
    END CATCH             

    当结果不是我们想要的就RAISERROR抛个错误,让CATCH处理

  • 相关阅读:
    oracle rank() 排名函数
    oracle rank over partition by
    oracle over函数
    oracle extract函数
    mybatis的<choose>和<when>、<otherwise>标签
    python字符串操作实方法大合集
    GO安全并发之无锁原子操作
    设计模式(Design Patterns)Java版
    Linux内核参数调优
    TCP协议解析
  • 原文地址:https://www.cnblogs.com/ghelement/p/5387375.html
Copyright © 2011-2022 走看看