Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kesalahan Transaksi SQL:Transaksi saat ini tidak dapat dilakukan dan tidak dapat mendukung operasi yang menulis ke file log

Anda selalu perlu memeriksa XACT_STATE() , tidak relevan dengan XACT_ABORT pengaturan. Saya memiliki contoh templat untuk prosedur tersimpan yang perlu menangani transaksi dalam konteks TRY/CATCH di Penanganan pengecualian dan transaksi bertingkat :

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Beberapa klausa OUTPUT dalam perintah SQL MERGE/INSERT/DELETE?

  2. Apakah Perubahan Data Capture Performance Loss Dibatasi ke Tabel yang Diaktifkan CDC?

  3. Bagaimana sanitasi yang lolos dari tanda kutip tunggal dikalahkan oleh injeksi SQL di SQL Server?

  4. Bagaimana saya bisa mendapatkan nama kolom dari tabel di SQL Server?

  5. SQL:Bagaimana saya bisa mendapatkan nilai atribut dalam tipe data XML?