sql >> データベース >  >> RDS >> Sqlserver

T-SQLのcatchブロックでトランザクションをロールバックする前にトランザクションをカウントする必要がありますか?

    実際、すでに1つになっている場合は、新しいトランザクションを開始することはありません。

    これは、ネストされたストアドプロシージャ、分散TXN、およびTransactionScopeを処理します

    SQLServerのネストされたトランザクションなどはありません とりあえず。

    DECLARE @StartTranCount int
    
    BEGIN TRY
        SET @StartTranCount = @@TRANCOUNT
        IF @StartTranCount = 0 BEGIN TRAN
            -- my code
        IF @StartTranCount = 0 COMMIT TRAN
    END TRY
    BEGIN CATCH
        IF @StartTranCount = 0 AND @@trancount > 0
        BEGIN
            ROLLBACK TRAN
            DECLARE @message NVARCHAR(MAX)
            DECLARE @state INT
            SELECT @message = ERROR_MESSAGE(), @state = ERROR_STATE()
            RAISERROR (@message, 11, @state)
        END
        /*
        or just
        IF @StartTranCount = 0 AND @@trancount  
            ROLLBACK TRAN
        */
    END CATCH
    


    1. 文字列フィールドのOraclenullチェック

    2. T-SQLを使用して文字列から数値部分を取得するにはどうすればよいですか?

    3. 日付範囲の日付を確認する方法は、mysqlクエリの2つの日付の間にあります

    4. MSAccessと条件付き並べ替えのドラッグアンドドロップ