Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Lỗi giao dịch SQL:Giao dịch hiện tại không thể được cam kết và không thể hỗ trợ các hoạt động ghi vào tệp nhật ký

Bạn luôn cần kiểm tra XACT_STATE() , không liên quan đến XACT_ABORT cài đặt. Tôi có một ví dụ về mẫu cho các thủ tục được lưu trữ cần xử lý các giao dịch trong ngữ cảnh TRY / CATCH tại Xử lý ngoại lệ và giao dịch lồng nhau :

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. SQL Server 2005 xoay vòng trên số cột không xác định

  2. Gỡ lỗi không hiển thị phiên bản thủ tục được lưu trữ hiện tại

  3. Làm cách nào để tôi có thể bỏ qua cơ sở dữ liệu hệ thống và cho phép công việc tác nhân SQL Server 2008 di chuyển qua ERROR_NUMBER 208?

  4. Không thể đọc nội dung khi XML có 2 trình bao bọc

  5. Chuyển đổi varchar thành datetime trong sql đang có mili giây