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

SQL トランザクション エラー:現在のトランザクションをコミットできず、ログ ファイルに書き込む操作をサポートできません

    XACT_STATE() を常にチェックする必要があります 、XACT_ABORT とは関係ありません 設定。 例外処理とネストされたトランザクション :

    create procedure [usp_my_procedure_name]
    as
    begin
        set nocount on;
        declare @trancount int;
        set @trancount = @@trancount;
        begin try
            if @trancount = 0
                begin transaction
            else
                save transaction usp_my_procedure_name;
    
            -- Do the actual work here
    
    lbexit:
            if @trancount = 0   
                commit;
        end try
        begin catch
            declare @error int, @message varchar(4000), @xstate int;
            select @error = ERROR_NUMBER(),
                   @message = ERROR_MESSAGE(), 
                   @xstate = XACT_STATE();
            if @xstate = -1
                rollback;
            if @xstate = 1 and @trancount = 0
                rollback
            if @xstate = 1 and @trancount > 0
                rollback transaction usp_my_procedure_name;
    
            raiserror ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message) ;
        end catch   
    end
    


    1. ASIHTTPRequestを使用してiOSから画像をアップロードする

    2. 2 つのテーブルをマージして、重複する日付とギャップを見つける

    3. MySQLとPDO

    4. 最小ログイン挿入先