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

Làm thế nào để cam kết và khôi phục giao dịch trong máy chủ sql?

Không sử dụng @@ERROR , sử dụng BEGIN TRY/BEGIN CATCH thay vì. Xem bài viết này: Xử lý ngoại lệ và giao dịch lồng nhau cho một thủ tục mẫu:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc biểu thức chính quy SQL Server

  2. Cách xóa tệp dữ liệu khỏi cơ sở dữ liệu máy chủ SQL (T-SQL)

  3. lưu trữ mật khẩu trong SQL Server

  4. Hủy chia với tên cột

  5. MAMP có nên trả về ::1 dưới dạng IP trên localhost không?