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

SQLサーバーでトランザクションをコミットしてロールバックする方法は?

    @@ERRORは使用しないでください 、BEGIN TRY/BEGIN CATCHを使用します 代わりは。この記事を参照してください:例外処理とネストされたトランザクション> サンプル手順の場合:

    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) ;
            return;
        end catch   
    end
    


    1. INステートメントに使用される変数/文字列のPHPPDObindParam ...?

    2. Oracleドライバーのロギングを適切な方法で使用してUPDATEステートメントをログに記録するにはどうすればよいですか?

    3. BigQuery / SQLで大量のデータを含む列に行を転置するにはどうすればよいですか?

    4. Oracle 10gで2つのコレクションを結合する際の内部エラー(00801)